0

最近、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のベンダー/アセットの画像が使用可能になりました。

質問

  1. そもそもアセットコンパイルレーキタスクがデータベースに接続しようとしているのはなぜですか?
  2. Herokuでは、アセットをローカルでコンパイルしてgitリポジトリに追加するか、実行時に追加することもできます。これらの他の2つのオプションは、スラッグのコンパイル中にのみ発生するため、同じ問題が発生することはないと思います。これらのいずれかに利点はありますか?
4

2 に答える 2

1
  1. タスクはに依存している可能性が:environmentあり、データベース接続が確立されているスタートアップコードを含むアプリケーション全体が読み込まれます。

  2. アセットの事前コンパイルは、リクエスト時間を改善する目的を果たします。Railsはリクエストごとにアセットをコンパイルする必要はありません。アセットをローカルでコンパイルする場合は、独自のマシンを使用しています。これは、herokuenvよりも高速である可能性があります。フックを使用して、コンパイルを自動的に行うことができます。

于 2012-12-31T14:13:45.333 に答える
0

config.initialize_on_precompileは、アセットのコンパイルタスク中にフルレールアプリケーションをロードするかどうかをrakeに指示します。これには、データベースへの接続も含まれます。ローカルでコンパイルすることに関しては、いいえ、それを行うことにはあまりメリットはありません。

于 2012-12-31T14:12:31.353 に答える