Ruby on Rails: 你好,世界

13

我是一名长期从事Java开发的程序员,第一次尝试使用Ruby进行开发。我正在尝试使用Rails应用程序完成“Hello World”的步骤,但出现了困难。

我确定我在这里缺少了一些基础知识。话虽如此,无论是StackOverflow的“类似标题的问题”还是Google的“ruby rails hello world”(或其变体),都没有澄清我所缺少的内容。

我已经通过RVM安装了Ruby(v1.9.3p194)、Gem(1.8.23)和Rails(3.2.3),并使用以下命令生成了一个控制器:

rails generate controller common

在默认的“config/routes.rb”文件中,我有以下两个路由尝试:

Web::Application.routes.draw do
  root :to => "common#index"
  match ':controller(/:action(/:id))(.:format)'
end

当我最初运行"rails server"并在浏览器中加载"http://localhost:3000/common"时,我看到了以下内容:

Unknown action
The action 'index' could not be found for CommonController

我了解到这是因为我的通用控制器中没有定义"index",所以我编辑了"app/controllers/common_controller.rb",并添加了以下内容:

class CommonController < ApplicationController

  def index
  end

end

我现在在浏览器上看到以下内容:"http://localhost:3000/common"

Template is missing
Missing template common/index, application/index with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :coffee]}. Searched in: * "/coding/workspace/[My] Toolbag/web/app/views"

我看到了相同的东西,这是有道理的。

从我所发现的情况来看,这显然是由于我的控制器没有任何渲染造成的,因此我认为它应该检查在“app/views/common/index.html.erb”中是否有内容,但是,我确实在那里有一个文件,其中包含以下内容:

<h1>Hello World</h1>

我也尝试过将“index.html.erb”重命名为“_index.html.erb”,“index.html”和“index”,所有这些都是基于在控制台错误“ActionView :: Missing Template”和上面类似的浏览器输出的变体中搜索到的。

许多谷歌搜索结果包含建议片段,但没有明确指导要编辑哪个文件与所述建议一起使用,否则会重复上面已经执行的步骤。

如果有人能够指导我缺少什么,我会很感激。

PS:我正在以超级用户运行,并拥有所有引用文件的“root:root”所有权。 Rails是否应该作为常规用户运行?虽然情况似乎不是这样,但似乎这样做并不能让我走得更远。


我不知道你问题的答案,但如果我可以推荐的话,可以看看http://ruby.railstutorial.org/。毫无疑问,这是网络上最好的Rails教程。它还有一个很棒的“hello world”教程。 - sunnyrjuneja
2个回答

10

哇,我真的偶然发现了实际的根本问题:

我在一个文件夹中创建了我的项目,该文件夹名称含有括号。也就是说,我是从“/coding/workspace/[My] Toolbag”中运行“rails new web”的。

今晚我偶然在“/coding/workspace”中尝试了一次,这次终于成功了。因此,我测试了从以下位置运行“rails new web”来证实我的怀疑:

/coding/workspace/test1
/coding/workspace/test 2
/coding/workspace/test [3]
/coding/workspace/test [4
/coding/workspace/test ]5
/coding/workspace/test [6/subfolder

确认怀疑。文件夹3、4、6中的Rails项目出现了我在这个问题中描述的问题,而文件夹1、2、5中的Rails项目运行正常。

具体来说,问题是路径中有一个开放方括号"["。

我正在使用Linux Mint。该问题可能适用范围更广,但我还没有尝试在其他发行版、Windows或Mac上进行复制。

非常感谢 Brett Sanders 多次提供帮助并确认我的方法应该是正确的。我将提交此答案并将其标记为正确答案,以防其他人遇到相同的问题。


很高兴你解决了问题。可能应该在帖子上添加一个Linux标签。 - Brett Sanders
我实际上不太倾向于这样做。我刚在Mac OS X 10.7.3上确认了相同的错误。除非有人确认在Windows上不会发生这种情况,否则这似乎是一个普遍存在的问题。 - DreadPirateShawn
1
注意:现在已将此问题作为错误报告提交到Rails GitHub存储库中:https://github.com/rails/rails/issues/6010 - DreadPirateShawn
@DreadPirateShawn 做得好,突出并追求这个问题。 - Will Sheppard

10

很奇怪,我刚刚按照您的步骤重复操作(使用Rails 3.2.3和Ruby 1.9.3-p0),并在访问 localhost:3000/common 时看到了"Hello World."。

http://grab.by/dg6Y

以下是我建议您尝试的内容,以确保不是您的设置出现了问题:

1)进入您的Rails项目目录

2)执行以下终端命令

rails g scaffold user name:string email:string

rake db:migrate

3)访问此URL http://localhost:3000/users

如果您的Rails设置正确,您应该能够看到这个页面

http://grab.by/dg74

如果这些步骤不起作用,则可能是您的设置出现了一些奇怪的问题。

另外,请务必从您的应用程序中删除public/index.html文件。如果您不删除它,您将无法看到您在路由文件中指定的自定义根页面。

如果上述方法无效,可能是您的Ruby版本有问题?

希望这能有所帮助!


尽管我还没有确定我的奇怪问题,但我接受这个答案。鉴于您确认我应该采取正确的方法,我能够在另一台计算机上重新确认我的东西应该可以工作。谢谢! - DreadPirateShawn
我刚刚又尝试了一下使用Ruby(v1.9.3p194)、Gem(1.8.23)和Rails(3.2.3),仍然没有问题,因此似乎Ruby版本不是问题所在。你有尝试过脚手架吗? - Brett Sanders

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接