2010-09-13 60 views
2

我正在開發一個Rails應用程序,它有一堆(數百個)託管在S3服務器上的圖像。有喜歡這裏IMAGE_TAG點的幫手,我不得不這樣通過配置/環境/ development.rb test.rb和production.rb添加到:Rails:一臺服務器上的圖像,另一臺服務器上的CSS和Javascript上的圖像

config.action_controller.asset_host = "http://mybucket.s3.amazonaws.com" 

然而,這也意味着它看起來有對CSS和Javascript。這是一個巨大的痛苦,因爲每次我改變CSS我都必須重新上傳到亞馬遜。

所以..有沒有一種簡單的方法,我可以讓我的應用程序看起來像亞馬遜的圖像,但本地的CSS/JavaScript?

(我用Rails 3.0)

回答

6

您可以將Proc對象傳遞給config.action_controller.asset_host,讓它在運行時以編程方式確定結果。

config.action_controller.asset_host = Proc.new do |source| 
    case source 
    when /^\/(images|videos|audios)/ 
    "http://mybucket.s3.amazonaws.com" 
    else 
    "http://mydomain.com" 
    end 
end 

但保持原樣,這將給你http://mybucket.s3.amazonaws.com/images/whatever.png當您使用image_tag :whatever

如果要修改路徑,以及,你可以做config.action_controller.asset_path

config.action_controller.asset_path = Proc.new do |path| 
    path.sub /^\/(images|videos|audios)/, "" 
end 

非常類似的東西,這將使你http://mybucket.s3.amazonaws.com/whatever.png與前者相結合。

0

沒有什麼從通過完整的URL image_tag阻止你:image_tag("#{IMAGE_ROOT}/icon.png")

但對我來說,移動靜態圖像(圖標,背景等)到S3和留在軌道上stylesheets/js文件聽起來有點不一致。你可以把它們全部移到S3或者設置Apache進行緩存(如果你擔心用戶拉大圖像會給Rails造成太多的開銷)。

順便說一句,您不必將config.action_controller...放到所有三種環境的配置文件中:將該行放置在config/environment.rb中將具有相同的效果。

+0

我想過要做IMAGE_ROOT,但它看起來不太乾。而本地的css只是爲了開發。最終他們都會在S3 – dpieri 2010-09-13 21:44:56

+0

@ pieri434爲什麼你沒有圖像和樣式表在本地進行開發? Amazon S3控制檯應該允許您輕鬆導出圖像。 – 2010-09-13 21:49:34

相關問題