最近、Herokuで作業しているRailsアプリを追加しました。Heroku gitリポジトリにプッシュすると、スラッグの生成の一部としてアセットのコンパイルが実行されます。ここでは次のエラーで失敗していました。
could not connect to server: Connection refused
Is the server running on host "127.0.0.1" and accepting
TCP/IP connections on port xxxx?
問題は、rakeタスクrake assets:precompile
がデータベースに接続しようとしていて、slugのコンパイル中にアプリが構成変数にアクセスできないことです。Herokuのトラブルシューティングドキュメントapplication.rb
でこの情報を見つけ、ファイルに所定の修正を追加しました。
config.assets.initialize_on_precompile = false
これで、アセットが正しくコンパイルされ、gemのベンダー/アセットの画像が使用可能になりました。
質問
- そもそもアセットコンパイルレーキタスクがデータベースに接続しようとしているのはなぜですか?
- Herokuでは、アセットをローカルでコンパイルしてgitリポジトリに追加するか、実行時に追加することもできます。これらの他の2つのオプションは、スラッグのコンパイル中にのみ発生するため、同じ問題が発生することはないと思います。これらのいずれかに利点はありますか?