看起来这里有些人有这个问题,但我找不到另一个话题的任何解决方案。
我正在做Ruby on Rails-Tutorial的第3章,处理静态页面。当我想在本地主机上打开它时,它在浏览器中给我一个“路由错误”。
我的Ruby目前的版本是1.9.3。 我的Rails目前是3.2版本。
我试过了:
单个静态页面的HTML代码中也没有错误。而且我在本教程中找不到任何更多帮助,也没有在StackOverflow上的其他问题中找到帮助。
编辑:
这是来自浏览器的实际错误消息:
路由错误
没有路线匹配[GET]“/ static_pages / home”尝试运行 有关可用路线的更多信息,请参阅rake路线。
如果我转到http://localhost:3000/static_pages/home
,转到我拥有的三个静态页面之一。
这是routes.rb:
SampleApp::Application.routes.draw do
get "static_pages/home"
get "static_pages/help"
get "static_pages/about"
end
另外,我也在终端尝试了“rake routes
”。这是结果:
home_static_pages GET /static_pages/home(.:format) static_pages#home
help_static_pages GET /static_pages/help(.:format) static_pages#help
about_static_pages GET /static_pages/about(.:format) static_pages#about
static_pages POST /static_pages(.:format) static_pages#create
new_static_pages GET /static_pages/new(.:format) static_pages#new
edit_static_pages GET /static_pages/edit(.:format) static_pages#edit
GET /static_pages(.:format) static_pages#show
PUT /static_pages(.:format) static_pages#update
DELETE /static_pages(.:format) static_pages#destroy
这是服务器给我的错误消息:
Started GET "/static_pages/home.html" for 127.0.0.1 at 2012-04-03 13:23:54 +0200
ActionController::RoutingError (No route matches [GET] "/static_pages/home.html"):
actionpack (3.2.3) lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call'
actionpack (3.2.3) lib/action_dispatch/middleware/show_exceptions.rb:56:in `call'
railties (3.2.3) lib/rails/rack/logger.rb:26:in `call_app'
railties (3.2.3) lib/rails/rack/logger.rb:16:in `call'
actionpack (3.2.3) lib/action_dispatch/middleware/request_id.rb:22:in `call'
rack (1.4.1) lib/rack/methodoverride.rb:21:in `call'
rack (1.4.1) lib/rack/runtime.rb:17:in `call'
activesupport (3.2.3) lib/active_support/cache/strategy/local_cache.rb:72:in `call'
rack (1.4.1) lib/rack/lock.rb:15:in `call'
actionpack (3.2.3) lib/action_dispatch/middleware/static.rb:62:in `call'
railties (3.2.3) lib/rails/engine.rb:479:in `call'
railties (3.2.3) lib/rails/application.rb:220:in `call'
rack (1.4.1) lib/rack/content_length.rb:14:in `call'
railties (3.2.3) lib/rails/rack/log_tailer.rb:14:in `call'
rack (1.4.1) lib/rack/handler/webrick.rb:59:in `service'
/Network/Servers/pluto.kayoom.lan/Users/benediktkrebs/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/webrick/httpserver.rb:138:in `service'
/Network/Servers/pluto.kayoom.lan/Users/benediktkrebs/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/webrick/httpserver.rb:94:in `run'
/Network/Servers/pluto.kayoom.lan/Users/benediktkrebs/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/webrick/server.rb:191:in `block in start_thread'
答案 0 :(得分:3)
试试这个:
match "/static_pages/home" => "static_pages#home", :via => :get
match "/static_pages/help" => "static_pages#help", :via => :get
match "/static_pages/about" => "static_pages#about", :via => :get
添加到路由中,重新启动服务器并刷新浏览器。
答案 1 :(得分:3)
如果您正在使用Spork,则必须重新运行Spork,以便您的测试将考虑配置文件(如routes.rb)中预先加载Spork的更改,因此不会自动更新。
来源:this is the source of this information “更改prefork加载中包含的文件(例如 routes.rb )后,您必须重新启动Spork服务器以加载新的Rails环境。 如果您认为应该通过测试失败,请使用Control-C退出Spork服务器并重新启动它
答案 2 :(得分:0)
您的routes.rb文件有问题,请使用RESTful样式:
resource :static_pages do
collection do
get :home
get :help
get :about
end
end
或非RESTful样式:
match "static_pages/home", :controller => "static_pages", :action => "home"
match "static_pages/help", :controller => "static_pages", :action => "help"
match "static_pages/about", :controller => "static_pages", :action => "about"
有关详细信息,请参阅官方指南:http://guides.rubyonrails.org/routing.html
答案 3 :(得分:0)
我在使用Rails教程时遇到了一些问题,它有助于查阅作者的GitHub回购:https://github.com/railstutorial
找到您正在处理的文件并逐行比较。或者只是剪切并粘贴整个文件,看它是否会运行,然后追踪你的错误。
答案 4 :(得分:0)
如果你检查配置中的routes.rb,你可能会发现/ home中缺少'e'。添加它,你是金色的。或绿色。或者其他:)
答案 5 :(得分:0)
检查你的http://地址,特别是你在localhost:3000 / path或localhost:3000 / path1 / path2等
答案 6 :(得分:0)
将映射格式从get
更改为match
后,您将不再需要static_pages,只需直接转到localhost:3000/pagename
,例如localhost:3000/about
答案 7 :(得分:-1)
从Ruby 2到Ruby 3存在一些差异,但仍然不容易找到3的文档。应该只有一个教程:rails 2和3之间的实际差异。 通过在rails上下载Ruby提供的指南是“红宝石书”,但它已经不再好了。它应该至少包含第19章开头的建议。
答案 8 :(得分:-1)
在
配置/ routes.rb中
取消注释