【发布时间】:2012-03-30 17:06:24
【问题描述】:
我希望 Rails 3 根据当前域动态抓取资产:
mysite.com - assets.mysite.com mysite.ru - assets.mysite.ru
是否可以开箱即用?还是我应该手动实现?
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3
我希望 Rails 3 根据当前域动态抓取资产:
mysite.com - assets.mysite.com mysite.ru - assets.mysite.ru
是否可以开箱即用?还是我应该手动实现?
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3
尝试向asset_host发送一个proc,这会产生资产路径和请求:
config.action_controller.asset_host = proc {|path, request|
"http://assets." << request.host
}
【讨论】:
请注意以下解决方案与其他解决方案的主要区别:
我一直都在做这样的事情:
config.action_controller.asset_host = Proc.new { |source, request|
"http#{request.ssl? ? 's' : ''}://cdn#{(source.hash % 3)}." << request.domain # cdn0-3.domain.com
}
或者,如果您有多个资产/cdn 主机,您可以决定选择从哪个主机提供什么样的资产,如下所示:
config.action_controller.asset_host = Proc.new { |source, request|
case source
when /^\/images/
"http#{request.ssl? ? 's' : ''}://cdn#{(source.hash % 2)}." << request.domain # cdn0-1.domain.com
when /^\/javascripts/, /^\/stylesheets/
"http#{request.ssl? ? 's' : ''}://cdn#{(source.hash % 2) + 2}." << request.domain # cdn2-3.domain.com
else
"http#{request.ssl? ? 's' : ''}://cdn4." << request.domain # cdn4.domain.com
end
}
希望这会有所帮助!
【讨论】:
Zlib.crc32(source)而不是source.hash作为source.hash值在机器和进程之间不一致。
你的意思是subdomains?
subdomains(tld_length = 1)
Returns all the subdomains as an array, so ["dev", "www"] would be returned for “dev.www.rubyonrails.org“. You can specify a different tld_length, such as 2 to catch ["www"] instead of ["www", "rubyonrails"] in “www.rubyonrails.co.uk“.
【讨论】:
在 config/environments/production.rb 等中
config.action_controller.asset_host = "http://assets." << request.host
【讨论】:
request' 我必须在文件顶部为此要求任何 pakage 吗?
call 实例方法的东西,该方法采用路径和请求。