5

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

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

ответ

0

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

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

4

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

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, которые определяют путь изображения, но последний имеет приоритет. Я включаю свой собственный модуль, который имеет приоритет над всеми из них (код внутри берется из ActionView :: Helpers :: AssetTagHelper).

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

+0

Кто-нибудь может подтвердить это? Я закончил тем, что кусал пулю и обнимал конвейер активов для изображений. – swrobel

+0

Спасибо @Semyon это работает как шарм !! – wael34218

+0

Спасибо! Я использовал эту технику, чтобы сохранить AssetNotPrecompiledError от создания ошибки сервера 500 в производстве, если возникает ошибка при разрешении пути изображения через конвейер активов. В моем переопределении image_path я просто вызываю «super (source)», но добавляю предложение rescue, которое регистрирует ошибку и возвращает «#» для пути. Я поместил строку «ActionView :: Base.send» в инициализатор, как вы предложили. Работает отлично! –

Смежные вопросы