Heroku で Rails 4 を使用しています。force_ssl = true で、asset_host が Cloudfront CDN に構成されています。Cloudfront CDN は、Heroku rails サーバーをオリジンとして使用し、「match protocol」を true に設定するように構成されています。自己署名証明書を使用するステージング インスタンスで同様の設定をしています。自己署名のため、ステージング インスタンスでは force_ssl が false であり、CDN は (HTTPS ではなく) HTTP を強制するように構成されています。
問題は、本番サーバーのデプロイメントが縮小された application.js の CDN のバージョンを更新できないことです。展開ごとに SHA が変化し、次のことを確認しました。
- CDN のバージョンは、ホスト URL を Heroku サーバーに置き換えたバージョンと同じではありません。CDN は古いバージョンの JS を提供しています。
したがって:
- デプロイはスムーズに実行され、変更がプッシュされます。
- rake assets:precompile はデプロイ中に実行され、新しい名前の application-new-sha.js ファイルが作成されます。
- この新しい js ファイルは、デプロイ後に提供される HTML ページで CDN URL を使用して参照されます。
- CDN の JS のバージョンは、古い展開のものです。
- Rails サーバー ホストを置き換える JS のバージョンは、適切な JS を取得します。
- ステージング サーバーにはこの問題はありません。唯一の違いは、アセットのオリジンが HTTPS ではなく HTTP であることです。
これは絶対に腹立たしいです。
この問題を回避するために、S3 と asset_sync gem の使用に戻ることを検討しています。
これをトラブルシューティングするためのアドバイスはありますか? または問題を回避しますか?