Oks*_*ana 4 ruby-on-rails ruby-on-rails-3
我希望Rails 3根据当前域动态获取资产:
mysite.com - assets.mysite.com mysite.ru - assets.mysite.ru
开箱即可吗?或者我应该手动实现它?
Ric*_*son 12
尝试将proc发送到asset_host,它会产生资产路径和请求:
config.action_controller.asset_host = proc {|path, request|
"http://assets." << request.host
}
Run Code Online (Sandbox Code Playgroud)
请注意以下解决方案中与其他解决方案的主要区别:
我总是这样做:
config.action_controller.asset_host = Proc.new { |source, request|
"http#{request.ssl? ? 's' : ''}://cdn#{(source.hash % 3)}." << request.domain # cdn0-3.domain.com
}
Run Code Online (Sandbox Code Playgroud)
或者,如果您有多个资产/ 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
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!