“Ruby on Rails-Tutorial”中的路由错误

看起来这里的一些人有这个问题,但我找不到另一个主题的任何解决方案。

我正在做Ruby on Rails-Tutorial的第3章,处理静态页面。 当我想在localhost上打开它时,它在浏览器中给出了“路由错误”。

我的Ruby目前的版本是1.9.3。 我的Rails目前是3.2版。

我试过了:

  • 重新启动服务器
  • 再次保存所有文件
  • 检查static_pages_controller.rb中的任何问题
  • 检查routes.rb中的任何问题
  • 检查static_oages_spec.rb中的任何问题

此外,单个静态页面的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' 

试试这个 :

 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 

添加到路由,重新启动服务器并刷新浏览器。

如果您正在使用Spork,则必须重新运行Spork,以便您的测试将考虑配置文件(如routes.rb)中预先加载Spork的更改,因此不会自动更新。

  1. 停止Spork(Ctrl + C)
  2. 再次运行Spork(捆绑exec spork)

来源: 这是此信息的来源 “在更改prefork加载中包含的文件(例如routes.rb )之后,您将不得不重新启动Spork服务器以加载新的Rails环境 。如果您认为测试失败了他们应该通过,退出Spork服务器与Control-C并重新启动它

你的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

我在使用Rails教程时遇到了一些问题,它有助于能够查阅作者的GitHub回购: https : //github.com/railstutorial

找到您正在处理的文件并逐行比较。 或者只是剪切并粘贴整个文件,看它是否会运行,然后追踪你的错误。

如果你在config中检查routes.rb,你可能会发现/ home中缺少’e’。 添加它,你是金色的。 或绿色。 管他呢 :)

检查你的http://地址,特别是如果你在localhost:3000 / path或localhost:3000 / path1 / path2等

一旦你将映射的格式从get更改为match你将不再需要static_pages,只需直接转到localhost:3000/pagename例如localhost:3000/about

从Ruby 2到Ruby 3存在一些差异,但仍然不容易找到3的文档。 应该只有一个教程:rails 2和3之间的实际差异。通过下载Ruby on rails提供的指南是“ruby书”,但它不再好了。 它应该至少包含第19章开头的建议。

配置/ routes.rb中

取消注释

root:to =>’welcome #index’