5

我正在升級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">?謝謝!

回答

0

看看這個寶石: https://github.com/spohlenz/digestion,它應該做你需要的東西:)。

否則,您可以將不希望包含在資產管道中的資產從應用程序/資產移回公共(例如public/images)。一切都應該如你所期望的那樣工作,而不需要寶石。

4

你可以猴子補丁::的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