Capistrano по умолчанию затрагивает все файлы, которые он считает в «актив». Как вы сказали, это означает, что после каждого развертывание рельсам думает каждый актив изменился и браузеры Виля Загрузите более новую версию каждый раз.
Вы можете отключить это в Capistrano со следующей настройкой
set :normalize_asset_timestamps, false
Если вы используете SVN, то измененные даты для файлов должны отражать даты последнего изменения в вашем хранилище, так что должно быть совершенным.
Если вы используете Apache, вы можете добавить что-то подобное, чтобы действительно сделать работу кеширования для вас. Это помогает, говоря браузеру о том, чтобы полагаться на директивы «Cache Control», означающие, что если он знает, что актив кэширован, он даже не потрудится запросить его.
#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>
Я установил мой рабочий сервер этот путь и теперь возвращают посетителей выполнить только один запрос (Get /), который возвращает динамический контент и все активы (~ 40 - 50) кэшируются.
Обратите внимание, что с рельсов 3.1 Rails использует MD5, а не Timestamps, что означает, что этот вопрос больше не является relavent. – 2011-07-26 17:09:52