Как генерировать идентификаторы активов в Rails 3 для управления кешем? - PullRequest
3 голосов
/ 17 марта 2011

В Rails при обслуживании статических файлов вы получаете asset ID, который добавляется к URL, например,

<script src="/javascripts/application.js?1300371955" ...
<link href="/stylesheets/custom.css?1299690788" ...

Таким образом, URL-адрес статического файла изменяется, если изменяется временная метка файла и браузеры автоматически запрашивают новый файл.

Я видел, что с помощью вспомогательных методов для включения статических ресурсов --- stylesheet_link_tag, javascript_include_tag и image_tag --- Rails автоматически добавляет временные метки ко всем ссылкам на эти файлы.

Как я могу реализовать нечто подобное для других ресурсов, у которых нет таких вспомогательных методов?
Например, .swf файлы?

( Есть ли у этой "стратегии" принудительной повторной загрузки имя, если да, то как оно называется? )

Ответы [ 2 ]

4 голосов
/ 18 марта 2011

Метод Rails, который добавляет метку времени к активам, называется rails_asset_id и определяется в ActionView :: Helpers :: AssetTagHelper.Хотя это частный метод, к нему можно обратиться во вспомогательном методе, чтобы сгенерировать его для ваших пользовательских тегов, например так:

def swf_param_tag(path)
  asset_id = rails_asset_id(path)
  "<param name='movie' value='#{path}?#{asset_id}'/>"
end

Он требует, чтобы вы указали путь, потому что он вызывает File.mtime (путь) .to_i.to_s на нем, чтобы узнать время последнего изменения.

Здесь есть дальнейшее объяснение того, что тег актива покупает здесь: http://api.rubyonrails.org/classes/ActionView/Helpers/AssetTagHelper.html

0 голосов
/ 21 марта 2011

@ Unixmonkey: ваше решение работает очень хорошо.

В качестве альтернативы есть также плагин swf_fu :

относитесь к вашемуAdobe Flash swf-файлы, как и любой другой ресурс (изображения, javascripts и т. Д.), И встраивают их с помощью SWFObject 2.2

, который имеет тегирование ресурса встроенный.

...