【Rails】デプロイしたときにassetsがうまく適用されない

Railsでherokuにデプロイしたのに、なぜかうまくstylesheetやjavascriptなどのassetsが適用されていない。ってなったら、きっとAssetsPipelineのところ。

以下などを参考。

Rails Asset Pipeline on Heroku Cedar | Heroku Dev Center

以下を追加。これでRailsはもともとあるコンパイルされたassetsを読み込もうとする。

gem 'rails_12factor', group: :production

このgemはどうやらherokuの人が作ってるらしい。

heroku/rails_12factor · GitHub

Sprocketはマニフェスト/app/assets/javascripts/application.css/app/assets/stylesheets/application.css)に従ってスクリプトをインポートします。

  • Rails)Sprocketsってなに?

(Rails)Sprocketsってなに? - gaaamiiのブログ

そしてAssetPipelineというのはSprocketsライブラリによって提供される仕組み。オリジナルのソース(.coffee.scssコンパイルして、それらをapplication.jsapplication.cssに統合して、圧縮して、ダイジェスト(固有のID)を追加する。

そしてここで、注意。

AssetPipelineでは、development環境ではコンパイル時点で出力を行い、production環境ではコンパイルを行わない。この環境による差が、結構問題を生むことが多いので注意が必要。

production環境でアプリケーションを動作させるときは、あらかじめアセットをプリコンパイルしておきます。以下のようにコマンドを実行。

$ rake assets:precompile

これでpublic以下もまるごとサーバーにあげてしまえば、うまくデプロイできます。

そういえばprecompileしたときにこんなメッセージがでた。

DEPRECATION WARNING: The configuration option `config.serve_static_assets` has been renamed to `config.serve_static_files` to clarify its role (it merely enables serving everything in the `public` folder and is unrelated to the asset pipeline). The `serve_static_assets` alias will be removed in Rails 5.0. Please migrate your configuration files accordingly.

Rails 5.0ではどうやらserve_static_assetsはなくなるらしい。