Отключить конвейер ресурсов Rails 3.1 только для изображений? - PullRequest
5 голосов
/ 28 февраля 2012

Я обновляю приложение Rails 3 до 3.2 и настраиваю конвейер ресурсов.Это отлично подходит для css / js, но я не вижу смысла использовать его для изображений, и, к сожалению, у меня есть css с кучей ссылок /images/*.png и т. П.

Есть лиспособ отключить конвейер ресурсов только для изображений, чтобы image_tag("x.png") вернулся к возвращению <img src="/images/x.png"> вместо <img src="/assets/x.png">?Спасибо!

Ответы [ 2 ]

4 голосов
/ 28 февраля 2012

Вы можете сделать обезьянку-патч ActionView :: Base, попробуйте это в консоли rails:

helper.image_path "foo" #=> "/assets/foo"

module OldImagePath
  def image_path(source)
    asset_paths.compute_public_path(source, 'images')
  end
  alias_method :path_to_image, :image_path
end
ActionView::Base.send :include, OldImagePath

helper.image_path "foo" #=> "/images/foo"

Вы можете поместить это, например, в инициализатор.По умолчанию ActionView :: Base включает ActionView :: Helpers :: AssetTagHelper и Sprockets :: Helpers :: RailsHelper, которые оба определяют image_path, но последние имеют приоритет.Я включаю свой собственный модуль, который имеет приоритет над всеми ними (код внутри взят из ActionView :: Helpers :: AssetTagHelper).

Хотя, имеет смысл использовать конвейер ресурсов для изображений тоже.Они получают хэш-сумму в своих именах файлов, чтобы их можно было постоянно кэшировать на стороне клиента, не спрашивая сервер, был ли файл изменен.

0 голосов
/ 28 февраля 2012

Посмотрите на этот драгоценный камень: https://github.com/spohlenz/digestion, он должен делать то, что вам нужно:).

В противном случае вы можете переместить активы, которые вы не хотите включать в конвейер активов, из приложения /активы обратно в общедоступные (например, public / images).Все должно работать так, как вы ожидаете, без необходимости в драгоценном камне.

...