我有一個非常基本的Rails 3.1rc6應用程序,基本上只有Devise,CanCan和rails_admin,以及一些非常簡單的模型。rails_admin在開發中但不在生產或heroku
在開發環境rails_admin工作正常,我可以打localhost:3000/admin
,並與我的管理員用戶登錄後,我可以看到所有的數據和管理它。
但是,當我部署到Heroku並嘗試點擊appname.herokuapp.com/admin
時,我得到「您尋找的頁面不存在,您可能錯誤輸入了地址或頁面可能已移動。這是從Heroku的日誌尾部:
app[web.1]:
app[web.1]:
app[web.1]: Started GET "/admin" for 79.157.xx.xx at 2011-08-24 12:15:52 +0000
app[web.1]:
app[web.1]: ActionController::RoutingError (No route matches {:controller=>"home"}):
heroku[router]: GET appname.herokuapp.com/admin dyno=web.1 queue=0 wait=0ms service=7ms status=404 bytes=728
app[web.1]: app/controllers/application_controller.rb:5:in `block in <class:ApplicationController>'
app[web.1]:
app[web.1]:
app[web.1]: cache: [GET /admin] miss
app[web.1]: Processing by RailsAdmin::MainController#index as HTML
app[web.1]: Completed 404 Not Found in 2ms
所有其他途徑(設計基本路線),做工精細。
當運行在生產薄在我的本地機器(我在Heroku上使用的網絡服務器)我得到相同的:
$ bundle exec rails server thin -e production
=> Booting Thin
=> Rails 3.1.0.rc6 application starting in production on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
Sprockets::Environment#static_root is deprecated
>> Thin web server (v1.2.11 codename Bat-Shit Crazy)
>> Maximum connections set to 1024
>> Listening on 0.0.0.0:3000, CTRL+C to stop
cache: [GET /admin] miss
Started GET "/admin" for 127.0.0.1 at 2011-08-24 13:49:42 +0200
Processing by RailsAdmin::MainController#index as HTML
Completed 404 Not Found in 3ms
ActionController::RoutingError (No route matches {:controller=>"home"}):
app/controllers/application_controller.rb:5:in `block in <class:ApplicationController>'
Rendered /home/mccoy/.rvm/gems/[email protected]/gems/actionpack-3.1.0.rc6/lib/action_dispatch/middleware/templates/rescues/routing_error.erb within rescues/layout (0.9ms)
而且在瀏覽器上
Routing Error
No route matches {:controller=>"home"}
這是我的routes.rb
root :to => "home#index"
devise_for :users
resources :users, :only => :show
mount RailsAdmin::Engine => '/admin', :as => 'rails_admin'
初始化/ rails_admin.rb
RailsAdmin.config do |config|
config.authorize_with :cancan
config.reload_between_requests = false
end
這裏在Heroku路由
$ heroku run rake routes
Running rake routes attached to terminal... up, run.8
root / {:controller=>"home", :action=>"index"}
new_user_session GET /users/sign_in(.:format) {:action=>"new", :controller=>"devise/sessions"}
user_session POST /users/sign_in(.:format) {:action=>"create", :controller=>"devise/sessions"}
destroy_user_session GET /users/sign_out(.:format) {:action=>"destroy", :controller=>"devise/sessions"}
user_password POST /users/password(.:format) {:action=>"create", :controller=>"devise/passwords"}
new_user_password GET /users/password/new(.:format) {:action=>"new", :controller=>"devise/passwords"}
edit_user_password GET /users/password/edit(.:format) {:action=>"edit", :controller=>"devise/passwords"}
PUT /users/password(.:format) {:action=>"update", :controller=>"devise/passwords"}
cancel_user_registration GET /users/cancel(.:format) {:action=>"cancel", :controller=>"devise/registrations"}
user_registration POST /users(.:format) {:action=>"create", :controller=>"devise/registrations"}
new_user_registration GET /users/sign_up(.:format) {:action=>"new", :controller=>"devise/registrations"}
edit_user_registration GET /users/edit(.:format) {:action=>"edit", :controller=>"devise/registrations"}
PUT /users(.:format) {:action=>"update", :controller=>"devise/registrations"}
DELETE /users(.:format) {:action=>"destroy", :controller=>"devise/registrations"}
user GET /users/:id(.:format) {:action=>"show", :controller=>"users"}
rails_admin /admin {:to=>RailsAdmin::Engine}
最後在這裏本地路由...相同!
$ rake routes
root / {:controller=>"home", :action=>"index"}
new_user_session GET /users/sign_in(.:format) {:action=>"new", :controller=>"devise/sessions"}
user_session POST /users/sign_in(.:format) {:action=>"create", :controller=>"devise/sessions"}
destroy_user_session GET /users/sign_out(.:format) {:action=>"destroy", :controller=>"devise/sessions"}
user_password POST /users/password(.:format) {:action=>"create", :controller=>"devise/passwords"}
new_user_password GET /users/password/new(.:format) {:action=>"new", :controller=>"devise/passwords"}
edit_user_password GET /users/password/edit(.:format) {:action=>"edit", :controller=>"devise/passwords"}
PUT /users/password(.:format) {:action=>"update", :controller=>"devise/passwords"}
cancel_user_registration GET /users/cancel(.:format) {:action=>"cancel", :controller=>"devise/registrations"}
user_registration POST /users(.:format) {:action=>"create", :controller=>"devise/registrations"}
new_user_registration GET /users/sign_up(.:format) {:action=>"new", :controller=>"devise/registrations"}
edit_user_registration GET /users/edit(.:format) {:action=>"edit", :controller=>"devise/registrations"}
PUT /users(.:format) {:action=>"update", :controller=>"devise/registrations"}
DELETE /users(.:format) {:action=>"destroy", :controller=>"devise/registrations"}
user GET /users/:id(.:format) {:action=>"show", :controller=>"users"}
rails_admin /admin {:to=>RailsAdmin::Engine}
上爲什麼rails_admin航線開發工作,但不是在生產中,我能做些什麼來解決這個問題的任何想法?
萬一有幫助,當我在生產環境中運行的WEBrick它失敗
$ rails s production
Exiting
/home/mccoy/.rvm/gems/[email protected]/gems/activesupport-3.1.0.rc6/lib/active_support/dependencies.rb:237:in `require': no such file to load -- rack/handler/production (LoadError)
from /home/mccoy/.rvm/gems/[email protected]/gems/activesupport-3.1.0.rc6/lib/active_support/dependencies.rb:237:in `block in require'
from /home/mccoy/.rvm/gems/[email protected]/gems/activesupport-3.1.0.rc6/lib/active_support/dependencies.rb:223:in `block in load_dependency'
from /home/mccoy/.rvm/gems/[email protected]/gems/activesupport-3.1.0.rc6/lib/active_support/dependencies.rb:636:in `new_constants_in'
from /home/mccoy/.rvm/gems/[email protected]/gems/activesupport-3.1.0.rc6/lib/active_support/dependencies.rb:223:in `load_dependency'
from /home/mccoy/.rvm/gems/[email protected]/gems/activesupport-3.1.0.rc6/lib/active_support/dependencies.rb:237:in `require'
from /home/mccoy/.rvm/gems/[email protected]/gems/rack-1.3.2/lib/rack/handler.rb:63:in `try_require'
from /home/mccoy/.rvm/gems/[email protected]/gems/rack-1.3.2/lib/rack/handler.rb:16:in `get'
from /home/mccoy/.rvm/gems/[email protected]/gems/rack-1.3.2/lib/rack/server.rb:269:in `server'
from /home/mccoy/.rvm/gems/[email protected]/gems/railties-3.1.0.rc6/lib/rails/commands/server.rb:59:in `start'
from /home/mccoy/.rvm/gems/[email protected]/gems/railties-3.1.0.rc6/lib/rails/commands.rb:54:in `block in <top (required)>'
from /home/mccoy/.rvm/gems/[email protected]/gems/railties-3.1.0.rc6/lib/rails/commands.rb:49:in `tap'
from /home/mccoy/.rvm/gems/[email protected]/gems/railties-3.1.0.rc6/lib/rails/commands.rb:49:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'
但我認爲這是在我身邊比什麼寶石/配置問題有關。儘管與開發環境很好地協作。
您是否嘗試過在開發中使用Thin來查看它是否有效?這可能是一個薄而不是環境問題的特定問題。 – Fabio
此外,'rake routes'的輸出可能對調試問題有用。你應該把它添加到你的問題。 – Fabio
薄確實在開發中工作。 我已經從heroku和local的'rake routes'添加了這個問題,這意味着要做到這一點,但在收集所有輸出時忘記了:)謝謝! – tomtastico