我刚刚升级到Rails 3,并决定采用虚拟/沙盒应用程序进行旋转。奇怪的是,我似乎无法让任何路由起作用!
这是我的问题:
[cobychapple@shiva:Dev]$rails new TestApp
create
create README
create Rakefile
...
[cobychapple@shiva:Dev]$cd TestApp/
[cobychapple@shiva:TestApp]$rails g scaffold widget name:text
invoke active_record
create db/migrate/20101020115518_create_widgets.rb
create app/models/widget.rb
...
[cobychapple@shiva:TestApp]$rake db:migrate
(in /Users/cobychapple/Dev/TestApp)
== CreateWidgets: migrating ==================================================
-- create_table(:widgets)
-> 0.0015s
== CreateWidgets: migrated (0.0016s) =========================================
[cobychapple@shiva:TestApp]$rake routes
(in /Users/cobychapple/Dev/TestApp)
widgets GET /widgets(.:format) {:action=>"index", :controller=>"widgets"}
widgets POST /widgets(.:format) {:action=>"create", :controller=>"widgets"}
new_widget GET /widgets/new(.:format) {:action=>"new", :controller=>"widgets"}
edit_widget GET /widgets/:id/edit(.:format) {:action=>"edit", :controller=>"widgets"}
widget GET /widgets/:id(.:format) {:action=>"show", :controller=>"widgets"}
widget PUT /widgets/:id(.:format) {:action=>"update", :controller=>"widgets"}
widget DELETE /widgets/:id(.:format) {:action=>"destroy", :controller=>"widgets"}
[cobychapple@shiva:TestApp]$rails s -d
=> Booting WEBrick
=> Rails 3.0.1 application starting in development on http://0.0.0.0:3000
[cobychapple@shiva:TestApp]$
所以现在我转到我的浏览器并访问http://localhost:3000/widgets
Rails说: 路由错误:没有路由匹配“/ widgets”
我不知道rake路由如何显示路由存在,然后服务器将不匹配它。我搜索了一大堆,似乎有一些人在rails 3中遇到了路由问题,但是没有一个像我得到的那样基本上是基本的。我确信我一路上都错过了一些小事,但我不能为我的生活弄清楚!有什么建议吗?
我的routes.rb文件只是脚手架生成的文件+文档注释:
TestApp::Application.routes.draw do
resources :widgets
# The priority is based upon order of creation:
# skip the rest of the comments...
end
答案 0 :(得分:3)
修改路由后需要重启服务器。 正如你在答案中所说的那样,你已经用-d选项启动了服务器,所以它进入了后台,然后你又尝试再次运行 - 但是第一个仍在运行。你应该杀了第一台服务器。
你提到的后台流程,不是任何流氓程序,它是你的第一台服务器。
答案是: 1)在开发过程中不要使用'-d'选项启动服务器(因此以后更容易重启或终止) 2)更改路由文件(或config / initializers中的任何文件)后,始终重新启动服务器
答案 1 :(得分:0)
我做了完全相同的事情,它对我有用。我唯一不同的是使用mysql数据库。 为什么不删除应用程序并重新执行。我无法想象你错过了什么。
这些是我的步骤:
rails new TestApp -d mysql
cd TestApp/
rails g scaffold widget name:text
rake db:create
rake db:migrate
rake routes
(in /home/gjp/work/TestApp)
widgets GET /widgets(.:format) {:controller=>"widgets", :action=>"index"}
widgets POST /widgets(.:format) {:controller=>"widgets", :action=>"create"}
new_widget GET /widgets/new(.:format) {:controller=>"widgets", :action=>"new"}
edit_widget GET /widgets/:id/edit(.:format) {:controller=>"widgets", :action=>"edit"}
widget GET /widgets/:id(.:format) {:controller=>"widgets", :action=>"show"}
widget PUT /widgets/:id(.:format) {:controller=>"widgets", :action=>"update"}
widget DELETE /widgets/:id(.:format) {:controller=>"widgets", :action=>"destroy"}
rails s
答案 2 :(得分:0)
所以看来我已经解决了问题(但我仍然没有得到它!):
我正在做的是使用-d(分离模式)运行服务器脚本,它会直接返回控制台。我尝试在没有-d选项的情况下运行服务器,看看服务器活动日志的结果是什么,当我以这种方式运行服务器脚本时,它直接崩溃说端口已经在使用(即使运行detatched它没有'崩溃?!?!?)。
重新启动。一切正常,服务器脚本在任一模式下都可以正常运行。
所以我想一定有一些后台端口绑定问题,重启时擦除干净。如果将来发生在其他任何人身上,我的猜测是你可能有一些流氓进程(MAMP bug?来自另一个rails应用程序的流氓mongrel服务器?)绑定到某个地方的主机端口。检查一下,如果你找不到任何重新启动的东西,看它是否修复它。
耸肩
感谢您输入的人和/或女孩。
答案 3 :(得分:0)
在正确运行的开发环境中,没有必要重新启动服务器以重新加载路由。
忽略这一点 - 因为你在分离模式下启动了第二次服务器尝试,你没有看到它收到的绑定错误。
在前台运行服务器通常更容易,因此您可以看到任何错误。
如果确实收到了绑定错误,则可以对其进行跟踪:
sudo netstat -an | grep LISTEN | grep 3000
或
ps aux | grep -i rails