【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.js
とapplication.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
はなくなるらしい。