2013-09-13 1 views
0

У меня есть тег, который по существу выглядит следующим образом:Переменные в качестве image_tag в пределах рельсов не будет выводить значение дайджеста в производстве

<%= image_tag("people/#{person.department}/#{person.name}.jpg") %>

В производстве, выход <img src="/assets/people/math/bob.jpg">

Однако, как с другими image_tags, я ожидал бы (и желал бы) вывода включить дайджест предварительно скомпилированного актива: <img src="/assets/people/math/bob-23u8518sd83yr822243dj0f.jpg">

Невозможно ли изображения image_tags, которые используются с va чтобы включить их переваривание в производство? В качестве примечания другие активы, такие как мои CSS, JS и другие изображения, которые не используют переменные, успешно используют их значения дайджеста, поэтому это не должно быть проблемой конфигурации.

Редактировать Я провел некоторое дополнительное тестирование, это, по-видимому, влияет на развертывание Heroku специально.

+0

Просто для размышления, какая разница в любом случае – Viren

+0

Рельсы, обеспечивающие дайджест в URL-адресе, позволяют мне устанавливать длинный кеш, заканчивая значения в CloudFront (или, если на то пошло, где бы вы ни устанавливали заголовки кэша для статических активов). С дайджестом, всякий раз, когда это изображение обновляется, браузер клиента запрашивает новое изображение при изменении значения дайджеста, а в браузере это совершенно новый актив, который он еще не кэшировал. Без этого я не могу предположить, что возвращающиеся пользователи будут видеть обновленные изображения. –

+0

Странно для меня это берет дайджест – Viren

ответ

1

Вы можете использовать метод Sprockets 'find_asset, пройдя логический путь к вашему активу, чтобы получить экземпляр Sprockets::BundledAsset. Например

> Rails.application.assets.find_asset("people/#{person.department}/#{person.name}.jpg") 
=> #<Sprockets::BundledAsset:0x3fe1142a4f10 pathname="/Users/timdorr/Projects/MyApp/app/assets/people/math/bob.jpg", mtime=2013-09-13 01:33:57 -0500, digest="23u8518sd83yr822243dj0f"> 

Вы можете вызвать digest_path на этом объекте, чтобы получить его MD5 сумма добавляется к активу.

> Rails.application.assets.find_asset("people/#{person.department}/#{person.name}.jpg").digest_path 
=> "people/math/bob-23u8518sd83yr822243dj0f.jpg" 

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