Capistranoは、デフォルトで、「アセット」と見なされるすべてのファイルにアクセスします。あなたが言ったように、これはすべてのデプロイレールがすべてのアセットが変更されたと考えた後、ブラウザが毎回新しいバージョンをダウンロードすることを意味します。
Capistranoでこれを無効にするには、次の設定を使用します
set :normalize_asset_timestamps, false
SVNを使用している場合、ファイルの変更日は、リポジトリで最後に変更された日付を反映している必要があるため、完全である必要があります。
Apacheを使用している場合は、このようなものを追加して、キャッシュを実際に機能させることができます。これは、「キャッシュ制御」ディレクティブに依存するようにブラウザに指示することで役立ちます。つまり、アセットがキャッシュされていることがわかっている場合は、わざわざリクエストする必要もありません。
#Etags should be based on the file parameters only (default includes INode)
FileETag MTime Size
#Rewrite stuff
RewriteEngine On
#This sets the environment variable (is_versioned) when the URL query string
#looks like ?874353948543 or any string of digits
RewriteCond %{QUERY_STRING} ^[0-9]+$
RewriteRule ^(.*)$ $1 [env=is_versioned:true]
<Directory /deployed-rails-app/public/ >
Options -Indexes FollowSymLinks -MultiViews
AllowOverride None
Order allow,deny
allow from all
#For files, force the browser to rely on cache-control directives and
#Rails asset timestamps by removing Etags and Last-Modified dates
#For all assets that aren't stamped by rails, cache them for ~ 3 hours
Header set "Cache-Control" "max-age=10000"
Header unset Etag
Header unset "Last-Modified"
#For all assets that ARE stamped by rails, cache them for 30 days
Header set "Cache-Control" "max-age=2592000" env=is_versioned
</Directory>
本番サーバーをこのように設定しましたが、リピーターは動的コンテンツを返す1つのリクエスト(Get /)のみを実行し、すべてのアセット(〜40〜50)がキャッシュされます。