2012-08-17 63 views
4

在我production.rb我給自己定的:Rails 3 - 從資產服務器提供資產時出現故障嗎?

# Enable serving of images, stylesheets, and JavaScripts from an asset server 
    config.action_controller.asset_host = "http://myassets.com" 

而且圖像,js和樣式表從我的CDN(資產服務器)

但如果哪天該資產的服務器出現故障時加載罰款?它會返回一個404?

因爲在我的資產服務器(CDN)中配置了pull zone,所以內容仍可從/assets/..獲得。

是否有任何回退或我如何進行回退,所以當我的assets server失敗或返回錯誤時,我的應用程序會在應用程序內部從/assets/加載資產?

回答

3

production.rb

config.action_controller.asset_host = Proc.new { |source, request, asset_path| 
    if some_condition 
    "http://myassets.com" 
    else 
    asset_path 
    end 
} 

欲瞭解更多信息,請參閱AssetTagHelper

編輯

沒有想到這個我就預防措施是值得的額外加載/添加請求到您的應用程序。如果您正在構建一個具有故障轉移服務器的大型應用程序以提供高可用性,則資產將成爲您應對這種冗餘的又一件事。如果您通過AWS或Rackspace等服務將您的資料託管在雲上,我認爲您的可用性很好,您不應該擔心這個問題。這種方法幾乎完全否定了緩存資產的好處。

+0

'asset_path'很好!現在我用這個來檢查can是否仍然存在uri = URI(url)'res = Net :: HTTP.get_response(uri)''如果res.is_a?(Net :: HTTPSuccess)...'但是這使得應用程序加載速度緩慢,有沒有其他方法? – 2012-08-27 23:33:28

+0

關於應用程序加載緩慢,請參閱我的編輯。 – anxiety 2012-08-28 00:02:23

+1

你說得對,但是如果有一種方法只在每次加載時檢查資產服務器一次?應用程序不會運行那麼慢,我認爲...在這個級別,我不能使用'會議'那裏會有什麼選擇? – 2012-08-28 15:06:43

0

你可能會探討以下指令

ActionController::Base.asset_host = Proc.new { |source, request| 
    if #code to check if CDN is alive 
    "CDN Url" 
    else 
    "/public/assets/" 
    end 
} 
+0

這應該在我的'production.rb'或其他地方? – 2012-08-21 20:33:53

+0

是的,可以在config.action_controller.asset_host下,確保你也這樣。 – delagroove 2012-08-21 21:44:05

+0

在'else'子句中,我返回'「/ assets」',但它試圖從'http:/// assets/...'加載東西,如果我設置'else'返回'「http://localhost:3000/assets「'...仍然沒有加載。 – 2012-08-21 23:10:40

相關問題