【问题标题】:No Route matches "say/hello" when route exists当路由存在时,没有路由匹配“say/hello”
【发布时间】:2011-09-19 03:02:29
【问题描述】:

我正在尝试在 RoR 中创建一个非常简单的 Hello, world 程序,但是当我查看 URL http://localhost:3000/say/hello 时,我收到了错误消息 No route matches: "say/hello"

当我启动 rails 服务器时,我收到了这条消息,其中包含分散在各处的警告:

=> Booting WEBrick
=> Rails 3.0.9 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2011-06-20 20:02:44] INFO  WEBrick 1.3.1
[2011-06-20 20:02:44] INFO  ruby 1.9.2 (2011-02-18) [i686-linux]
[2011-06-20 20:02:44] WARN  TCPServer Error: Address already in use - bind(2)
Exiting
/home/eyedea/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/webrick/utils.rb:73:in `initialize': Address already in use - bind(2) (Errno::EADDRINUSE)
  from /home/eyedea/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/webrick/utils.rb:73:in `new'
  from /home/eyedea/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/webrick/utils.rb:73:in `block in create_listeners'
  from /home/eyedea/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/webrick/utils.rb:70:in `each'
  from /home/eyedea/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/webrick/utils.rb:70:in `create_listeners'
  from /home/eyedea/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/webrick/server.rb:74:in `listen'
  from /home/eyedea/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/webrick/server.rb:62:in `initialize'
  from /home/eyedea/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/webrick/httpserver.rb:24:in `initialize'
  from /home/eyedea/.rvm/gems/ruby-1.9.2-p180/gems/rack-1.2.3/lib/rack/handler/webrick.rb:10:in `new'
  from /home/eyedea/.rvm/gems/ruby-1.9.2-p180/gems/rack-1.2.3/lib/rack/handler/webrick.rb:10:in `run'
  from /home/eyedea/.rvm/gems/ruby-1.9.2-p180/gems/rack-1.2.3/lib/rack/server.rb:217:in `start'
  from /home/eyedea/.rvm/gems/ruby-1.9.2-p180/gems/railties-3.0.9/lib/rails/commands/server.rb:65:in `start'
  from /home/eyedea/.rvm/gems/ruby-1.9.2-p180/gems/railties-3.0.9/lib/rails/commands.rb:30:in `block in <top (required)>'
  from /home/eyedea/.rvm/gems/ruby-1.9.2-p180/gems/railties-3.0.9/lib/rails/commands.rb:27:in `tap'
  from /home/eyedea/.rvm/gems/ruby-1.9.2-p180/gems/railties-3.0.9/lib/rails/commands.rb:27:in `<top (required)>'
  from script/rails:6:in `require'
  from script/rails:6:in `<main>'

我开始使用:rails generate controller Say hello goodbye 其中列出路线得到“say/hello”

另外:我遇到了这个问题,这可能是相关的。当我在一个明确列为现有的文件中编写一些基本的 html 时,我得到了这个:

我写这个:

~/work/demo$ /app/views/say/hello.html.erb

得到这个错误信息作为回报:

bash: /app/views/say/hello.html.erb: No such file or directory

这里发生了什么?我直接从使用 Rails 的敏捷开发中获得这些说明,而且非常简单。我不明白发生了什么。

【问题讨论】:

标签: ruby-on-rails


【解决方案1】:
[2011-06-20 20:02:44] WARN  TCPServer Error: Address already in use - bind(2)

您已经有一个服务器(或其他东西)在您的服务器应该运行的端口上运行。因此,您认为正在运行的代码(您说有问题的路线)实际上没有运行。关闭另一个进程(可能是以前运行的 rails 服务器?)后,您可以启动正确的进程并确保它确实具有该路由。

【讨论】:

  • 用谷歌搜索了错误信息。找到有关如何杀死幻象服务器的说明。目前一切正常
【解决方案2】:

您在 rails 启动时遇到的错误表明您的机器上的端口 3000 上已经有一个服务器正在运行(显然该服务器对“say/hello”路由一无所知)。关闭那个然后再试一次。

【讨论】:

    【解决方案3】:

    第二个错误是因为从 bash 路径 / 转到根目录。试试:

    cat app/views/say/hello.html.erb
    

    【讨论】:

      【解决方案4】:

      我面临着类似的问题。在我的情况下,在 $ rails server 命令之后,我无法在终端本身中使用 ctrl-C 关闭服务器。当我在终端中按 ctrl-C 时没有任何反应。

      当我在另一个终端上重新打开项目并再次运行它时,我收到以下消息:


      系统产品名称:~/testapp$ rails s => 启动 WEBrick => Rails 3.1.0.rc4 应用程序开始在http://0.0.0.0:3000 上开发 => 使用 -d 调用以分离 => Ctrl-C 关闭服务器 [2011-06-30 16:41:23] INFO WEBrick 1.3.1 [2011-06-30 16:41:23] 信息 ruby​​ 1.9.2 (2011-02-18) [x86_64-linux] [2011-06-30 16:41:23] WARN TCPServer 错误:地址已在使用中 - 绑定 (2) 退出 /.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/webrick/utils.rb:73:in initialize': Address already in use - bind(2) (Errno::EADDRINUSE) ls.rb:73:innew' 来自bubble/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/webrick/utils.rb:73:in block in create_listeners' from bubble/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/webrick/utils.rb:70:ineach' 来自bubble/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/webrick/utils.rb:70:in create_listeners' from bubble/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/webrick/server.rb:74:inlisten' 来自bubble/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/webrick/server.rb:62:in initialize' from bubble/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/webrick/httpserver.rb:24:ininitialize' 来自bubble/.rvm/gems/ruby-1.9.2-p180@rails31/gems/rack-1.3.0/lib/rack/handler/webrick.rb:10:in new' from bubble/.rvm/gems/ruby-1.9.2-p180@rails31/gems/rack-1.3.0/lib/rack/handler/webrick.rb:10:inrun' 来自bubble/.rvm/gems/ruby-1.9.2-p180@rails31/gems/rack-1.3.0/lib/rack/server.rb:265:in start' from bubble/.rvm/gems/ruby-1.9.2-p180@rails31/gems/railties-3.1.0.rc4/lib/rails/commands/server.rb:70:instart' 来自bubble/.rvm/gems/ruby-1.9.2-p180@rails31/gems/railties-3.1.0.rc4/lib/rails/commands.rb:54:in block in <top (required)>' from bubble/.rvm/gems/ruby-1.9.2-p180@rails31/gems/railties-3.1.0.rc4/lib/rails/commands.rb:49:intap' 来自bubble/.rvm/gems/ruby-1.9.2-p180@rails31/gems/railties-3.1.0.rc4/lib/rails/commands.rb:49:in <top (required)>' from script/rails:6:inrequire' 来自脚本/rails:6:in `'


      本质上,我每次都必须从系统监视器中终止该进程。这能治好吗?

      【讨论】:

      • 对我有用的是按 Ctrl+z 然后输入“fg”(当然不带引号)。这应该会杀死服务器。
      • 我想要的不是每次都杀死进程。而是修复终端不接受“Ctrl + C”挂钩关闭服务器的原因。尝试在网上搜索,但大多数人谈论的是终止开关。
      • 据我所知,这是一个 Rails 错误,从 3.0.5 左右开始就一直存在。在这里,一些信息stackoverflow.com/questions/5891567/…
      【解决方案5】:

      在 Mac 上,在终端中键入以下内容:

      lsof | grep IPv4

      lsof|grep 3000 我认为是在 linux 中。

      找到以“ruby”开头的狮子并记下旁边的数字。

      假设数字是 1234。在终端中输入以下内容:

      kill -9 1234
      

      你应该是对的。记得用 control-c 退出 WEBrick!

      【讨论】:

        猜你喜欢
        • 2016-08-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多