切换控制器的资产主机

Vie*_*iet 12 ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1

试图找出一种在某个控制器访问时更改资产主机的方法.

https协议将严格访问控制器,因此我需要将资产主机切换为使用https.目前,资产主机设置为链接到S3的CNAME子域,并且没有与之关联的SSL证书.我想要实现的是用https Amazon S3 URL替换当前的资产主机.我担心的唯一资产是CSS和JS包含的.

我正在考虑使用帮助程序从stylesheet_link_tag和javascript_include_tag中删除主机,并将其替换为https Amazon S3网址.虽然对我来说似乎有些讨厌.

或者,如果request.ssl可能有更改资产主机的方法?是真的?

我正在使用Rails 3.2.x.

Vie*_*iet 17

为我的案例找出解决方案.

在我的Production环境文件中使用proc on config.action_controller.action_host结束处理request.ssl上的逻辑?并据此作出回应.这是代码

config.action_controller.asset_host = Proc.new { |source, request = nil, *_|
  request && request.ssl? ? 'https://s3.amazonaws.com/my_bucket' : 'http://s3.my-domain.com'
}
Run Code Online (Sandbox Code Playgroud)

'request'设置为nil,以适应资产文件中调用asset_host的情况(如果使用资产助手标记,则为CSS和JS).由于请求不存在,并且如果未在args中分配请求,则在编译资产时将抛出错误(如下所示).

This asset host cannot be computed without a request in scope. Remove the second argument to your asset_host Proc if you do not need the request, or make it optional.
Run Code Online (Sandbox Code Playgroud)

由于proc http://bugs.ruby-lang.org/issues/5694中的选项参数的错误,*_存在