仅针对图片禁用Rails 3.1资产管道?

问题描述:

我正在升级Rails 3应用程序到3.2并设置资产管道。对于css/js来说非常棒,但我并没有真正意识到将它用于图像的问题,不幸的是我有很多参考文献/images/*.png等等。仅针对图片禁用Rails 3.1资产管道?

是否有一种方法可以禁用图像资产管道,因此image_tag("x.png")将返回到<img src="/images/x.png">而不是<img src="/assets/x.png">?谢谢!

看看这个宝石: https://github.com/spohlenz/digestion,它应该做你需要的东西:)。

否则,您可以将不希望包含在资产管道中的资产从应用程序/资产移回公共(例如public/images)。一切都应该如你所期望的那样工作,而不需要宝石。

你可以猴子补丁::的ActionView基地,尝试这种在轨控制台:

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

任何人都可以确认此作品?我最终咬着子弹,并拥抱图像的资产管道。 – swrobel 2012-02-29 07:58:48

+0

谢谢@Semyon它就像一个魅力! – wael34218 2012-09-13 09:38:25

+0

谢谢!如果在解决通过资产管道的图像路径时发生错误,我使用这种技术来防止AssetNotPrecompiledError在生产中产生500个服务器错误。在我的image_path覆盖中,我只是调用'super(source)',但添加了一个记录错误并返回路径“#”的救援子句。正如你所建议的那样,我把'ActionView :: Base.send'这一行放入了一个初始化程序中。完美的作品! – 2013-06-01 05:42:38