仅为图像禁用Rails 3.1资产管道?

时间:2012-02-28 03:17:06

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 asset-pipeline ruby-on-rails-3.2

我正在将Rails 3应用升级到3.2并设置资产管道。这对css / js来说很棒,但是我并没有真正看到将它用于图像的重点,不幸的是我有大量的参考/images/*.png之类的css等。

有没有办法为图片禁用资产管道,以便image_tag("x.png")返回<img src="/images/x.png">而不是<img src="/assets/x.png">?谢谢!

2 个答案:

答案 0 :(得分:4)

你可以修补ActionView :: Base,在rails console中试试这个:

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)。

尽管如此,将资产管道用于图像也是有意义的。它们在文件名中获取哈希值,以便它们可以永久缓存在客户端,而无需询问服务器文件是否已更改。

答案 1 :(得分:0)

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

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