Ruby on rails config.action\u controller.asset\u主机的条件配置
我有一个Rails应用程序,它使用CloudFront来加速资产交付,一切都很顺利,在production.rb下添加了这个应用程序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(客户端未
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语句和一个回退来对冲这一点。