29

私のアプリは開発モードで正常に動作します。

RAILS_ENV=production rails s.cssまたは.jsファイルを使用せずに本番モードで実行すると、ロードされません。(私はを使用してアセットをプリコンパイルしRAILS_ENV=production bundle exec rake assets:precompileました。)

webrickログは次のことを示しています。

ActionController :: RoutingError([GET] "/assets/application-a73ce43be7bf75953cd0c60b2b4a7eb0.js"に一致するルートはありません):

ActionController :: RoutingError([GET] "/assets/application-986dd79830088c416c1632c12999ec69.css"に一致するルートがありません):

ファイルは(log \ product.logファイルに従って)コンパイルされ、私のpublic/assetsディレクトリにはフィンガープリントがある場合とない場合のファイルが表示されます。

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
4

1 に答える 1

47

Railsは、デフォルトでは本番モードで静的アセットを提供しません。これを無効にして静的アセットを提供する場合は、次のようにconfig/environments/production.rbファイルを更新します。

config.serve_static_assets = true

Railsのデフォルト構成の背後にある理由は、本番モード(Apache、Nginxなど)で標準のWebサーバーの背後で実行され、Railsアプリにリクエストをプロキシすることを前提としているためです。アセットはプリコンパイルされているため、Apache / Nginx/etc。Railsプロセスと話す必要なしにそれらに直接サービスを提供できます。

于 2012-04-11T02:54:06.990 に答える