Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails config.action\u controller.asset\u主机的条件配置_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails config.action\u controller.asset\u主机的条件配置

Ruby on rails config.action\u controller.asset\u主机的条件配置,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一个Rails应用程序,它使用CloudFront来加速资产交付,一切都很顺利,在production.rb下添加了这个应用程序 config.action_controller.asset_host = "http://cdn.mydomain.com/" 但是,受限网络上的一组客户端使用Varnish缓存访问我的应用程序,并且无法解析CDN域。Varnish添加此标题: request.env["HTTP_X_VARNISH"] 我想做的基本上是仅在未设置此标头时使用CDN(客户端未

我有一个Rails应用程序,它使用CloudFront来加速资产交付,一切都很顺利,在production.rb下添加了这个应用程序

config.action_controller.asset_host = "http://cdn.mydomain.com/"
但是,受限网络上的一组客户端使用Varnish缓存访问我的应用程序,并且无法解析CDN域。Varnish添加此标题:

request.env["HTTP_X_VARNISH"]
我想做的基本上是仅在未设置此标头时使用CDN(客户端未通过varnish)

基本上是这样的

config.action_controller.asset_host = "http://cdn.mydomain.com/" unless request.env["HTTP_X_VARNISH"]
如何做到这一点


TIA

资产主机
可以是一个
过程

config.action_controller.asset_host = ->(source, request) do
  if request.env["HTTP_X_VARNISH"]
    "#{request.protocol}#{request.host_with_port}"
  else
    "http://cdn.mydomain.com/"
  end
end

请注意,
请求
可能并不总是可用(特别是在预编译期间)。你可能想用一个if语句和一个回退来对冲这一点。