Повреждения Кэширования Актива направляющих Первые несколько загрузок страницы

Мы используем актив направляющих, кэширующийся для JS и CSS как это:

<%= stylesheet_link_tag 'reset','global','admins','autocomplete', 'date_input', 'tablesorter', 'partners', 'jqmodal', :media => 'screen', :cache => set_asset_cache(:admins) %>
<%= javascript_include_tag :defaults, 'autocomplete', 'searchbox', 'jqmodal', :cache => set_asset_cache(:admins) %>

В нашем развертывающиеся мы звоним rake tmp:assets:clear каждый раз. Проблема состоит в том, что первые несколько загрузок страницы после развертывания подходят без CSS или js на странице. Я предполагаю до кэшируемого all.js, и all.css были повторно созданы.

Мы развертываемся много раз в день, и это страшно для любых пользователей, которые, оказывается, сталкиваются с арестованной страницей.

Люди нашли какой-либо способ сделать это более гладким, таким образом, новые кэшируемые активы, как гарантируют, будут там на первой новой загрузке страницы?

6
задан Brian Armstrong 11 May 2010 в 19:53
поделиться

1 ответ

Вы можете попробовать подогреть кеш во время развертывания с помощью wget, например ( бессовестно репостил ):

wget -r -nd --delete-after http://whatever.com/~popular/page/

Однако это должно быть выполнено после вы переключаете свою символическую ссылку на новое развертывание. Возможно, более элегантным решением может быть вызов методов кэширования ресурсов вручную в вашем развертывании, хотя я не уверен, насколько это возможно. Вот где кэширование выполняется в Rails :

# File vendor/rails/actionpack/lib/action_view/helpers/asset_tag_helper.rb, line       273
273:       def javascript_include_tag(*sources)
274:         options = sources.extract_options!.stringify_keys
275:         concat  = options.delete("concat")
276:         cache   = concat || options.delete("cache")
277:         recursive = options.delete("recursive")
278: 
279:         if concat || (ActionController::Base.perform_caching && cache)
280:           joined_javascript_name = (cache == true ? "all" : cache) + ".js"
281:           joined_javascript_path = File.join(joined_javascript_name[/^#{File::SEPARATOR}/] ? ASSETS_DIR : JAVASCRIPTS_DIR, joined_javascript_name)
282: 
283:           unless ActionController::Base.perform_caching && File.exists?(joined_javascript_path)
284:             write_asset_file_contents(joined_javascript_path, compute_javascript_paths(sources, recursive))
285:           end
286:           javascript_src_tag(joined_javascript_name, options)
287:         else
288:           expand_javascript_sources(sources, recursive).collect { |source| javascript_src_tag(source, options) }.join("\n")
289:         end
290:       end

Вы можете изменить код кеширования и запустить его вручную при развертывании.

1
ответ дан 17 December 2019 в 07:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: