2012-04-11 4 views
29

私のアプリは開発モードで正常に動作します。rails 3.1.3:プロダクションでローカルで実行しようとすると、アセットパイプラインが機能しない

RAILS_ENV=production rails sを使用してプロダクションモードで実行すると、どの.cssファイルも.jsファイルもロードされません。 (私はRAILS_ENV=production bundle exec rake assets:precompileを使用して、プリコンパイル資産をしました。)

をWEBrickにログを示しています

ActionController :: RoutingError(Noルートマッチ[GET] "/assets/application-a73ce43be7bf75953cd0c60b2b4a7eb0.jsを"):

そして

ActionController :: RoutingError(Noルートの一致が "/assets/application-986dd79830088c416c1632c12999ec69.css" [GETしない]):(ログの\ production.logファイルに従って)

ファイルがコンパイルされたと私パブリック/資産ディレクトリには、指紋とないそれらのファイルを表示しない:

ls public/assets 
application-986dd79830088c416c1632c12999ec69.css 
application-986dd79830088c416c1632c12999ec69.css.gz 
application-a73ce43be7bf75953cd0c60b2b4a7eb0.js 
application-a73ce43be7bf75953cd0c60b2b4a7eb0.js.gz 
application.css 
application.css.gz 
application.js 
application.js.gz 

答えて

47

Railsは、デフォルトでは、生産モードで静的な資産を提供していません。あなたはこれを無効にして、静的な資産を提供したい場合は、これであなたのconfig/environments/production.rbファイルを更新:

config.serve_static_assets = true 

Railsのデフォルトの設定の背後にある理由は、それはあなたが本番モードでの標準的なWebサーバーの背後で実行されますと仮定していることです(Apache、Nginxなど)を使用して、Railsアプリケーションに要求をプロキシします。アセットはあらかじめコンパイルされているので、Apache/Nginx/etc。あなたのRailsプロセスと対話することなく直接それらにサービスを提供することができます。

+0

今は意味があります。すばらしい説明をいただきありがとうございます。 – jpwynn

+0

@Dylanちょうど同じ問題に遭遇しました - すばらしい説明のおかげで! – weltschmerz

関連する問題