Heroku上的Rails 3.1.3 :(没有路由匹配“/assets/rails.png”)

我已经在Heroku上安装了一些基本的应用程序没有问题,这个(Rails 3.1.3)看起来很好,因为它显示了Rails欢迎页面

public/index.html.erb 

但当我删除该页面然后设置

 root :to => 'users#index' 

我遇到了问题。 在heroku日志中,它表示存在路由错误

 ActionController::RoutingError (No route matches [GET] "/assets/rails.png"): 

有谁知道这是关于什么的?

 2012-01-14T21:48:29+00:00 heroku[web.1]: Process exited 2012-01-14T21:48:33+00:00 app[web.1]: >> Thin web server (v1.2.6 codename Crazy Delicious) 2012-01-14T21:48:33+00:00 app[web.1]: >> Maximum connections set to 1024 2012-01-14T21:48:33+00:00 app[web.1]: >> Listening on 0.0.0.0:32570, CTRL+C to stop 2012-01-14T21:48:34+00:00 heroku[web.1]: State changed from starting to up 2012-01-14T21:48:35+00:00 app[web.1]: cache: [GET /] miss 2012-01-14T21:48:36+00:00 app[web.1]: 2012-01-14T21:48:36+00:00 app[web.1]: 2012-01-14T21:48:36+00:00 app[web.1]: Started GET "/assets/rails.png" for 216.251.147.10 at 2012-01-14 13:48:36 -0800 2012-01-14T21:48:36+00:00 app[web.1]: 2012-01-14T21:48:36+00:00 app[web.1]: ActionController::RoutingError (No route matches [GET] "/assets/rails.png"): 2012-01-14T21:48:36+00:00 app[web.1]: 2012-01-14T21:48:36+00:00 app[web.1]: 2012-01-14T21:48:36+00:00 app[web.1]: 2012-01-14T21:48:36+00:00 app[web.1]: cache: [GET /assets/rails.png] miss 2012-01-14T21:48:35+00:00 heroku[router]: GET mmcarrier.heroku.com/ dyno=web.1 queue=0 wait=0ms service=19ms status=200 bytes=5907 2012-01-14T21:48:36+00:00 heroku[router]: GET mmcarrier.heroku.com/assets/rails.png dyno=web.1 queue=0 wait=0ms service=30ms status=404 bytes=728 2012-01-14T21:48:46+00:00 app[web.1]: cache: [GET /] miss 2012-01-14T21:48:46+00:00 app[web.1]: 2012-01-14T21:48:46+00:00 app[web.1]: 2012-01-14T21:48:46+00:00 app[web.1]: Started GET "/assets/rails.png" for 216.251.147.10 at 2012-01-14 13:48:46 -0800 2012-01-14T21:48:46+00:00 app[web.1]: 2012-01-14T21:48:46+00:00 app[web.1]: ActionC 2012-01-14T21:48:46+00:00 app[web.1]: 2012-01-14T21:48:46+00:00 app[web.1]: 2012-01-14T21:48:46+00:00 app[web.1]: 2012-01-14T21:48:46+00:00 app[web.1]: cache: [GET /assets/rails.png] miss 2012-01-14T21:48:46+00:00 app[web.1]: cache: [GET /favicon.ico] miss 2012-01-14T21:48:46+00:00 heroku[router]: GET mmcarrier.heroku.com/favicon.ico dyno=web.1 queue=0 wait=0ms service=3ms status=200 bytes=0 2012-01-14T21:48:46+00:00 heroku[router]: GET mmcarrier.heroku.com/ dyno=web.1 queue=0 wait=0ms service=6ms status=200 bytes=5907 2012-01-14T21:48:46+00:00 heroku[router]: GET mmcarrier.heroku.com/assets/rails.png dyno=web.1 queue=0 wait=0ms service=4ms status=404 bytes=728 2012-01-14T21:48:59+00:00 app[web.1]: cache: [GET /] miss 2012-01-14T21:48:59+00:00 heroku[router]: GET mmcarrier.heroku.com/ dyno=web.1 queue=0 wait=0ms service=5ms status=200 bytes=5907 2012-01-14T21:48:59+00:00 app[web.1]: 2012-01-14T21:48:59+00:00 app[web.1]: 2012-01-14T21:48:59+00:00 app[web.1]: Started GET "/assets/rails.png" for 216.251.147.10 at 2012-01-14 13:48:59 -0800 2012-01-14T21:48:59+00:00 app[web.1]: 2012-01-14T21:48:59+00:00 app[web.1]: ActionController::RoutingError (No route matches [GET] "/assets/rails.png"): 2012-01-14T21:48:59+00:00 app[web.1]: 2012-01-14T21:48:59+00:00 app[web.1]: 2012-01-14T21:48:59+00:00 app[web.1]: 2012-01-14T21:48:59+00:00 app[web.1]: cache: [GET /assets/rails.png] miss 2012-01-14T21:48:59+00:00 heroku[router]: GET mmcarrier.heroku.com/assets/rails.png dyno=web.1 queue=0 wait=0ms service=3ms status=404 bytes=728 2012-01-14T21:49:18+00:00 app[web.1]: 2012-01-14T21:49:18+00:00 app[web.1]: 2012-01-14T21:49:18+00:00 app[web.1]: Started GET "/assets/rails.png" for 216.251.147.10 at 2012-01-14 13:49:18 -0800 2012-01-14T21:49:18+00:00 app[web.1]: 2012-01-14T21:49:18+00:00 app[web.1]: ActionController::RoutingError (No route matches [GET] "/assets/rails.png"): 2012-01-14T21:49:18+00:00 app[web.1]: 2012-01-14T21:49:18+00:00 app[web.1]: 2012-01-14T21:49:18+00:00 app[web.1]: 2012-01-14T21:49:18+00:00 app[web.1]: cache: [GET /assets/rails.png] miss 2012-01-14T21:49:18+00:00 heroku[router]: GET mmcarrier.heroku.com/assets/rails.png dyno=web.1 queue=0 wait=0ms service=4ms status=404 bytes=728 2012-01-14T21:49:33+00:00 app[web.1]: cache: [GET /] miss 2012-01-14T21:49:33+00:00 app[web.1]: 2012-01-14T21:49:33+00:00 app[web.1]: 2012-01-14T21:49:33+00:00 app[web.1]: Started GET "/assets/rails.png" for 216.251.147.10 at 2012-01-14 13:49:33 -0800 2012-01-14T21:49:33+00:00 app[web.1]: 2012-01-14T21:49:33+00:00 app[web.1]: ActionController::RoutingError (No route matches [GET] "/assets/rails.png"): 2012-01-14T21:49:33+00:00 app[web.1]: 2012-01-14T21:49:33+00:00 app[web.1]: 2012-01-14T21:49:33+00:00 app[web.1]: cache: [GET /assets/rails.png] miss 2012-01-14T21:49:33+00:00 app[web.1]: 2012-01-14T21:49:34+00:00 app[web.1]: cache: [GET /favicon.ico] miss 2012-01-14T21:49:33+00:00 heroku[router]: GET mmcarrier.heroku.com/ dyno=web.1 queue=0 wait=0ms service=6ms status=200 bytes=5907 2012-01-14T21:49:33+00:00 heroku[router]: GET mmcarrier.heroku.com/assets/rails.png dyno=web.1 queue=0 wait=0ms service=4ms status=404 bytes=728 2012-01-14T21:49:34+00:00 heroku[router]: GET mmcarrier.heroku.com/favicon.ico dyno=web.1 queue=0 wait=0ms service=3ms status=200 bytes=0 2012-01-14T21:50:21+00:00 app[web.1]: cache: [GET /] miss 2012-01-14T21:50:21+00:00 heroku[router]: GET mmcarrier.heroku.com/ dyno=web.1 queue=0 wait=0ms service=4ms status=200 bytes=5907 2012-01-14T21:50:21+00:00 app[web.1]: 2012-01-14T21:50:21+00:00 heroku[router]: GET mmcarrier.heroku.com/assets/rails.png dyno=web.1 queue=0 wait=0ms service=4ms status=404 bytes=728 2012-01-14T21:50:21+00:00 app[web.1]: Started GET "/assets/rails.png" for 216.251.147.10 at 2012-01-14 13:50:21 -0800 2012-01-14T21:50:21+00:00 app[web.1]: 2012-01-14T21:50:21+00:00 app[web.1]: 2012-01-14T21:50:21+00:00 app[web.1]: cache: [GET /assets/rails.png] miss 2012-01-14T21:50:21+00:00 app[web.1]: ActionController::RoutingError (No route matches [GET] "/assets/rails.png"): 2012-01-14T21:50:21+00:00 app[web.1]: 2012-01-14T21:50:21+00:00 app[web.1]: 2012-01-14T21:50:21+00:00 app[web.1]: 2012-01-14T21:52:42+00:00 heroku[slugc]: Slug compilation started 2012-01-14T21:52:54+00:00 heroku[api]: Deploy 983a24d by m73mitchell@gmail.com 2012-01-14T21:52:54+00:00 heroku[api]: Release v8 created by m73mitchell@gmail.com 2012-01-14T21:52:54+00:00 heroku[web.1]: State changed from up to bouncing 2012-01-14T21:52:54+00:00 heroku[web.1]: State changed from bouncing to created 2012-01-14T21:52:54+00:00 heroku[web.1]: State changed from created to starting 2012-01-14T21:52:55+00:00 heroku[slugc]: Slug compilation finished 2012-01-14T21:53:01+00:00 heroku[web.1]: State changed from starting to up 2012-01-14T21:53:05+00:00 heroku[router]: GET mmcarrier.heroku.com/assets/rails.png dyno=web.1 queue=0 wait=0ms service=37ms status=404 bytes=728 2012-01-14T21:53:17+00:00 heroku[router]: GET mmcarrier.heroku.com/assets/rails.png dyno=web.1 queue=0 wait=0ms service=5ms status=404 bytes=728 2012-01-14T21:53:36+00:00 heroku[router]: GET mmcarrier.heroku.com/assets/rails.png dyno=web.1 queue=0 wait=0ms service=2ms status=404 bytes=728 2012-01-14T21:53:38+00:00 heroku[router]: GET mmcarrier.heroku.com/ dyno=web.1 queue=0 wait=0ms service=107ms status=500 bytes=728 2012-01-14T21:53:40+00:00 heroku[router]: GET mmcarrier.heroku.com/ dyno=web.1 queue=0 wait=0ms service=20ms status=500 bytes=728 2012-01-14T21:53:49+00:00 heroku[run.1]: State changed from created to starting 2012-01-14T21:53:52+00:00 heroku[run.1]: State changed from starting to up 2012-01-14T21:53:57+00:00 heroku[run.1]: State changed from up to complete 2012-01-14T21:53:57+00:00 heroku[run.1]: Process exited 2012-01-14T21:55:15+00:00 heroku[router]: GET mmcarrier.heroku.com/assets/rails.png dyno=web.1 queue=0 wait=0ms service=35ms status=404 bytes=728 2012-01-14T21:55:17+00:00 heroku[router]: GET mmcarrier.heroku.com/assets/rails.png dyno=web.1 queue=0 wait=0ms service=3ms status=404 bytes=728 2012-01-14T21:55:22+00:00 heroku[router]: GET mmcarrier.heroku.com/ dyno=web.1 queue=0 wait=0ms service=12ms status=500 bytes=728 2012-01-14T21:56:18+00:00 heroku[router]: GET mmcarrier.heroku.com/ dyno=web.1 queue=0 wait=0ms service=12ms status=500 bytes=728 

看起来您在推送到Heroku之前可能没有预编译您的资产,请尝试:

 rake assets:precompile git add . etc etc 

我认为这应该有所帮助。 有关详细信息,请参阅此处: http : //devcenter.heroku.com/articles/rails31_heroku_cedar

无需预先编译混乱你的git!

heroku将预编译您的资产

使用rails 3.1.x,您将其添加到application.rb

 config.assets.initialize_on_precompile = false 

更新2012年7月16日

还有rails 3.2.x.

它似乎是ActiveRecord和database.yml的问题! 如果您不使用常规数据库,但使用MongoDB,则不需要上述内容。 但是,如果这样做,则需要禁用initilize,因为activerecord在初始化时读取数据库表,但在heroku的预编译阶段无法使用数据库。

使用MongoDB没有必要

/ UPDATE

rails 3.2.x :查看application.rb的顶部。 为了清楚起见,OMA评论是我的

 if defined?(Bundler) # If you precompile assets before deploying to production, use this line "OMA - comment this line" #Bundler.require(*Rails.groups(:assets => %w(development test))) # If you want your assets lazily compiled in production, use this line "OMA - uncomment this line" Bundler.require(:default, :assets, Rails.env) end 

为了让延迟启动使用rails(在heroku上)使用rails 3.2.3,我必须这样做:

在config / application.rb中:

 if defined?(Bundler) # If you precompile assets before deploying to production, use this line # Bundler.require(*Rails.groups(:assets => %w(development test))) # If you want your assets lazily compiled in production, use this line Bundler.require(:default, :assets, Rails.env) end ... module Romulo class Application < Rails::Application ... # Enable the asset pipeline config.assets.enabled = true # Version of your assets, change this if you want to expire all your assets config.assets.version = '1.0' # get precompilation working on heroku: config.assets.initialize_on_precompile = true config.serve_static_assets = false end end 

在config / environments / production.rb中:

 # Compress JavaScripts and CSS config.assets.compress = true # Don't fallback to assets pipeline if a precompiled asset is missed config.assets.compile = true # Generate digests for assets URLs config.assets.digest = true 

无需预编译资产。