Railsのエラー『TemplateError: Asset was not declared to be precompiled in production』の解決方法
このエラーは、Railsの本番環境でアセット(CSS、JS、画像など)が適切にプリコンパイルされていない場合に発生する。本番環境ではアセットが事前にコンパイルされる必要があり、未登録のアセットは読み込めないため、このエラーが起こることがある。
目次
エラーの発生条件
- 本番環境でアセットを使用しようとしたが、プリコンパイルされていない
- config.assets.precompile に適切なアセットが含まれていない
- アセットパイプラインが適切に設定されていない
エラーメッセージの例
Sprockets::Rails::Helper::AssetNotPrecompiled in Pages#index
Asset `custom.js` was not declared to be precompiled in production.アセットをプリコンパイルする
本番環境でアセットをコンパイルするには、以下のコマンドを実行する。
bin/rails assets:precompileconfig.assets.precompile の確認
config/initializers/assets.rb に必要なアセットが含まれているか確認する。
Rails.application.config.assets.precompile += %w( custom.js custom.css )アセットの配置場所の確認
アセットが適切な場所にあるか確認する。たとえば、app/assets/javascripts にあるべきファイルが vendor/assets/javascripts にあると、プリコンパイルされないことがある。
プリコンパイル済みアセットのクリア
古いアセットが原因でエラーが発生する場合がある。以下のコマンドでキャッシュをクリアする。
bin/rails assets:clobber
bin/rails assets:precompileconfig/environments/production.rb の設定確認
以下の設定が適切に行われているか確認する。
config.assets.compile = false
config.public_file_server.enabled = truepublic/assets にファイルが存在するか確認
本番環境でプリコンパイルされたアセットが public/assets ディレクトリ内に存在するか確認する。
Webpacker を使用している場合の対応
Webpacker を使用している場合、以下のコマンドでアセットをコンパイルする。
RAILS_ENV=production bin/webpack本番環境のデプロイ時にプリコンパイルを実行
本番環境にデプロイする際、Capistrano などを使用している場合は、deploy.rb に以下を追加する。
namespace :deploy do
after :updated, 'deploy:compile_assets'
endまとめ
- プリコンパイルのコマンドを実行する
- config.assets.precompile を適切に設定する
- アセットの配置場所を確認する
- 古いアセットを削除して再コンパイルする
- 本番環境の設定を見直す
-
前の記事
Oracle Database 文字列を1文字単位で置換する 2025.02.12
-
次の記事
Dart Setに条件を指定して一致した値に処理を実行する 2025.02.12
コメントを書く