バックグラウンド
私は現在、実際のWebサーバーを指すカスタムオリジンを使用してAmazonCloudFrontで使用する予定のRails3プロジェクトに取り組んでいます。これは、私のWebサーバーがCloudFrontから静的アセットを取得するようにブラウザーに指示することを意味します。CloudFrontにアセットがキャッシュされている場合はそれを返し、そうでない場合はWebサーバーから同じパスを使用して取得し、将来のためにキャッシュします。リクエスト。
問題
Amazon CloudFrontは、アセットを元の場所から再ダウンロードするために独自のキャッシュを無効にする必要があるかどうかを判断するときに、クエリ文字列パラメーターをドロップして無視します。これは明らかに、RailsがURLを生成する方法に問題を引き起こしRAILS_ASSET_ID
ます/assets/path/to/asset.ext?RAILS_ASSET_ID
。デフォルトのアセットURLを使用すると、CloudFrontは古いアセットを最大24時間保持します。
解決?
私がやりたいのは、Rails 3がアセットタグを生成する方法をなんとかオーバーライドして、のようなURLを生成できるようにすることです/assets/RAILS_ASSET_ID/path/to/asset.ext
。WebサーバーがこれらのURLに応答するようにする方法については、すでに解決策があります。RailsにURLを生成させる方法を理解する必要があります。
ノート
- 私
RAILS_ASSET_ID
は最新のgitcommitハッシュのサブ文字列になります。これの設定は、展開プロセス中にcapistranoによって処理されます。デプロイごとにすべてのアセットキャッシュを無効にしても問題ありません。アセット固有のIDは必要ありません - 私はすでにオーバーライドを試みましたが
ActionView::Helpers::AssetTagHelper.rewrite_asset_path
、それは機能していないようで、私が読んだことから、これは信頼されるべきではないプライベートメソッドです。 - 前もって感謝します!