我正在跟随来自railstutorial.org的Michael Hartl的Screencast。我只有一点点PHP,html和css经验,而且我对bash命令没问题,但面向对象的语言对我来说是全新的。
问题在于:我有一个叫做sample_app的应用程序。从命令行:
.../sample_app$ rails generate controller Pages home contact
现在,当我查看routes.rb:
SampleApp::Application.routes.draw do
get "pages/home"
get "pages/contact"
当我看到pages_controller时,我看到了:
class PagesController < ApplicationController
def home
end
def contact
end
end
当我尝试转到“localhost:3000 / pages / home”时,我收到以下错误页面:
路由错误
没有路线匹配“/ pages / home”
我怀疑此处还有其他内容,因为我在Public文件夹中创建了一个静态html文件,并且无法加载它:
这是我在Public中的静态页面:
<html>
<h1> TACO!</h1>
<body>
<p> testing <p>
</body>
</html>
当我尝试导航到“localhost:3000 / taco.html”时,我得到了同样的错误:
路由错误
没有路线匹配“/taco.html”
我一直在试图弄明白这一点,你会感到惊讶。我有一种感觉,这是一个超级简单的修复,或者是非常错误的东西。一个或另一个......
你知道吗: Rails 3.0.3 ruby 1.8.7(2010-01-10 patchlevel 249)[i486-linux] 宝石1.4.2
有什么想法吗?这很可能是RTFM的一种交易,如果是这样,请告诉我,我会更加努力......
答案 0 :(得分:0)
到目前为止,我已经重新创建了你的应用程序并且工作正常,我建议你检查你的Rails和gem文件的安装。
EDIT。我正在使用rails 3,它工作正常。
答案 1 :(得分:0)
好吧,看起来你正在使用的教程是一个Rails 2教程。在Rails 3中,路由语言发生了变化。你想要的是这样的。
SampleApp::Application.routes.draw do
match "/home" => "pages#home"
match "/contact" => "pages#contact"
end
然后您将创建“app / views / pages / home.html.erb”和“app / views / pages / contact.html.erb”。当你去/ home或/ contact时,无论你放在这两个html文件中的是什么。变量在控制器文件app / controllers / pages.rb中定义。如果你定义:
def contact
@contact = 'John Smith'
end
然后您可以在“app / views / pages / contact.html.erb”中访问此内容。
<h1>Contact name: <%= @contact %></h1>
答案 2 :(得分:0)
我明白了。我是假的。 rails仍在我的旧应用程序后台运行服务器......
而且我想如果没有我知道它,我知道它是如何发生的。当我为其他应用程序启动服务器时,我想我记得这样做:
rails s &
这样我就可以继续使用终端窗口了。但这导致无法使用Ctrl C轻松关闭服务器的问题。
所以我做了lsof -i :3000
出了问题:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ruby1.8 20667 kevin 5u IPv4 7193288 0t0 TCP *:3000 (LISTEN)
所以我用它杀了它:
kill -9 20667
当然谷歌的一点帮助......甜蜜!感谢您的帮助,知道它在别人的最终工作而不是我的工作是一个良好的开端,我通过筛选文档确实学到了很多其他的东西...
答案 3 :(得分:0)
感谢您发布答案,我遇到了同样的问题。我不知道所有的lsof和kill是什么,但我关闭终端服务器运行然后重新启动$ rails generate controller Pages home contact
然后运行$ rails server
然后我的localhost:3000 / pages / home工作如第81页所示。