我正在用Rails(v3.0.5)编写一个应用程序,我正在将其部署到Heroku。
当我在开发环境中访问 http://localhost:3000/places/new 时,我会被带到相应的页面(用于创建新位置的表单)。 一切都按预期工作(我可以创建新的地方)。
当我尝试访问 Heroku 生产环境中的相应页面 (http://example.heroku.com/places/new) 时,我被路由回我的应用程序的主页。
我的路由.db文件的内容:
ExampleSite::Application.routes.draw do
resources :users
resources :sessions, :only => [:new, :create, :destroy]
resources :places
root :to => 'pages#home'
match '/contact', :to -> 'pages#contact'
match '/about', :to -> 'pages#about'
match '/signin', :to -> 'sessions#new'
match '/signout', :to -> 'sessions#destroy'
end
开发和生产之间差异的原因可能是什么?
注意:到目前为止,我在"位置"控制器中构建的唯一操作是"新建"和"创建"(两者都在开发环境中按预期执行)。 不确定这是否相关,但请记住这一点。 此外,所有"用户"操作和路由似乎在开发和生产中都按预期工作。
编辑:如下面的评论中所述,/places/new 是一个受身份验证保护的页面,但在这两种情况下,我都在登录时尝试这样做。 此外,当我尝试在未登录的情况下访问生产环境中的/places/new 时,相应的重定向(到我的/signin 页面)会按预期工作。
我的 Heroku 日志来自尝试获取/place/new:
2011-05-12T23:37:30+00:00 app[web.1]: Started GET "/places/new" for 74.87.126.82 at Thu May 12 16:37:30 -0700 2011
2011-05-12T23:37:30+00:00 app[web.1]: Processing by PlacesController#new as HTML
2011-05-12T23:37:30+00:00 app[web.1]: Redirected to http://example.heroku.com/
2011-05-12T23:37:30+00:00 app[web.1]: Completed 302 Found in 4ms
2011-05-12T23:37:30+00:00 heroku[router]: GET example.heroku.com/places/new dyno=web.1 queue=0 wait=0ms service=9ms bytes=631
2011-05-12T23:37:30+00:00 app[web.1]:
2011-05-12T23:37:30+00:00 app[web.1]:
2011-05-12T23:37:30+00:00 app[web.1]: Started GET "/" for 74.87.126.82 at Thu May 12 16:37:30 -0700 2011
2011-05-12T23:37:30+00:00 app[web.1]: Processing by PagesController#home as HTML
2011-05-12T23:37:30+00:00 app[web.1]: Rendered layouts/_header.html.erb (4.3ms)
2011-05-12T23:37:30+00:00 app[web.1]: Rendered pages/home.html.erb within layouts/application (5.7ms)
2011-05-12T23:37:30+00:00 app[web.1]: Completed 200 OK in 7ms (Views: 3.5ms | ActiveRecord: 5.8ms)
2011-05-12T23:37:30+00:00 heroku[router]: GET example.heroku.com/ dyno=web.1 queue=0 wait=0ms service=14ms bytes=2357
事实证明,我有第二个(忘记了,因为我更改了"用户"的范围)身份验证条件,用于检查管理员级别状态。 如果当前用户不是管理员,则该条件将重定向到主页。
我在开发环境中创建的测试用户是管理员(因为我在切换范围之前创建了该用户),而我在生产环境中创建的测试用户不是管理员(因此重定向)。
谢谢大家的帮助! 虽然这个错误是一个疏忽,但你的建议教会了我一些我没有想到使用的新诊断工具。