2012-08-17 65 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

相关问题