【问题标题】:Routing Error during "Ruby on Rails-Tutorial"“Ruby on Rails-Tutorial”期间的路由错误
【发布时间】:2012-04-03 10:19:17
【问题描述】:

这里似乎有些人遇到了这个问题,但我在其他主题中找不到任何解决方案。

我正在编写 Ruby on Rails 教程的第 3 章,研究静态页面。当我想在本地主机上打开它们时,它会在浏览器中显示“路由错误”。

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

我试过了:

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

单个静态页面的 HTML 代码也没有错误。而且我在本教程中找不到更多帮助,在 StackOverflow 上的其他问题中也找不到。


编辑:

这是来自浏览器的实际错误消息:

路由错误

没有路由匹配 [GET] "/static_pages/home" 尝试运行 耙路线以获取有关可用路线的更多信息。

如果我转到 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'

【问题讨论】:

  • 如果您添加实际的错误消息,人们可能会帮助您。
  • 还要添加您尝试加载的确切 URL,以及您的路线文件。
  • 你能把你当前的全部(不工作的)代码推送到 github 吗?这将使人们更容易找出问题所在。
  • 是的,但我还是发现了问题... ;) 我刚开始做这些事情... =D 我的 Rails 服务器在.../rails_projects/demo_app 中运行。目前我在 sample_app 工作。无论如何,谢谢你的好答案...... =D希望我能让你笑一下...... ;)
  • 只需粘贴你的控制器,让我们看看你的控制器类和方法,如果你有匹配的控制器方法,下面指定的路由应该可以工作

标签: ruby-on-rails ruby routing


【解决方案1】:

试试这个:

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

加入路由,重启服务器,刷新浏览器。

【讨论】:

  • 完全按照你说的那样做......也没有帮助。对不起! =(更新了上面的问题。
  • 尝试运行 'rake routes > route.txt' 。并将您的路线检查到文件中。试试看。
  • 文本文件中的路线与我在 route.rb 中的路线完全相同。没有任何拼写错误。
  • 奇怪...可能是一些平台问题
【解决方案2】:

如果您使用的是 Spork,则必须重新运行 Spork,这样您的测试才会考虑配置文件(如 routes.rb)中的更改,这些文件预加载了 Spork,因此不会自动更新。

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

来源:this is the source of this information “更改包含在 prefork 加载中的文件(例如 routes.rb)后,您必须重新启动 Spork 服务器以加载新的 Rails 环境。 如果您认为应该通过的测试却失败了,请使用 Control-C 退出 Spork 服务器并重新启动它

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 都试过了。可悲的是它没有帮助......我仍然完全相同的错误信息。同样在重新启动服务器以及保存文件之后。
    【解决方案4】:

    我在阅读 Rails 教程时遇到了一些问题,这有助于我查阅作者的 GitHub 存储库:https://github.com/railstutorial

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

    【讨论】:

    • 又是同样的问题。在他的 github 中搜索 routes.rb,复制到我的文件中并保存。重新启动服务器并刷新浏览器。还是一样的错误信息。
    【解决方案5】:

    如果您检查配置中的 routes.rb,您可能会发现 /home 中缺少一个“e”。加上它,你就是金色的。或绿色。或者随便什么:)

    【讨论】:

      【解决方案6】:

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

      【讨论】:

        【解决方案7】:

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

        【讨论】:

          【解决方案8】:

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

          【讨论】:

            【解决方案9】:

            config/routes.rb

            取消注释

            root :to => 'welcome#index'

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-11-24
              • 1970-01-01
              相关资源
              最近更新 更多