実稼働用にアセットをコンパイルしようとしていますが、これはローカルでは行われません。
2 つの制約があります。
- データベースに接続できません (このステップの場合)
- 通常、データベースから情報を取得する必要がある動的ルートがあります (ただし、アセットのコンパイルには必要ありません)。
基本的に、本番環境の外でビルドされた docker イメージで実行します。データベースに接続できません。dockerfileでenv_varを使用して偽のdbアドレスを直接渡すというトリックを使用していました。
しかし今、私は動的ルートを持っています:
scope path: ":tenant", constraints: {tenant: Apartment.tenant_names.join('|')} do
....
end
新しいテナント名が追加されたときにルートをリロードするため、これは機能しています。
しかし、アセットをコンパイルする必要がある場合、コンパイルがアプリを初期化し、ルートが実行しようとしたためApartment.tenant_names.join('|')
に失敗しました。これは、db 接続なしでは明らかに失敗します。
文字列に置き換えるApartment.tenant_names.join('|')
と、データベースは呼び出されず、コンパイルは正常に実行されます。
コンパイル手順がアプリを初期化し、次のようなことを行う条件を作成しようとしているかどうかを確認するために使用できるものはありますか:
if assets_are_compiling?
scope path: ":tenant", constraints: {tenant: "assets_compiling"} do
....
else
scope path: ":tenant", constraints: {tenant: Apartment.tenant_names.join('|')} do
....
end
何か案が ?
編集:回避策
質問の解決策ではありませんが、今後の参考のための回避策を次に示します。どうやらラムダを使用してもコンパイルエラーは発生しませんでした:
scope path: ":tenant", constraints: lambda {|request| (Apartment.tenant_names.include?(request.path.split('/')[1])) } do