5

バックグラウンド

私は現在、実際の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を生成させる方法を理解する必要があります。

ノート

  1. RAILS_ASSET_IDは最新のgitcommitハッシュのサブ文字列になります。これの設定は、展開プロセス中にcapistranoによって処理されます。デプロイごとにすべてのアセットキャッシュを無効にしても問題ありません。アセット固有のIDは必要ありません
  2. 私はすでにオーバーライドを試みましたがActionView::Helpers::AssetTagHelper.rewrite_asset_path、それは機能していないようで、私が読んだことから、これは信頼されるべきではないプライベートメソッドです。
  3. 前もって感謝します!
4

2 に答える 2

4

ActionController::Base.config.asset_path「変更されていないアセットパスを取得し、アセットキャッシュが機能するために必要なパスを返すprocに設定します。」

これは、AssetTagHelperのドキュメントからのものです。

于 2010-12-22T17:17:28.520 に答える
1

asset_idプラグインは問題を解決するはずです。Amazon S3 と CloudFront をサポートしています。

于 2010-12-22T16:01:36.013 に答える