12

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

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

我正在考虑使用帮助程序从 stylesheet_link_tag 和 javascript_include_tag 中剥离主机,并将它们替换为 https Amazon S3 url。不过对我来说似乎有点骇人听闻。

或者如果 request.ssl 有办法改变资产主机?是真的?

我正在使用 Rails 3.2.x。

4

1 回答 1

17

为我的情况找出解决方案。

最终在我的生产环境文件中使用 config.action_controller.action_host 上的 Proc 来处理 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'
}

'request' 设置为 nil 以适应在资产文件中调用asset_host 的情况(如果您使用资产助手标签,则为CSS 和JS)。由于 request 不存在,并且如果在 args 中没有指定 request,那么编译 assets 时会抛出错误(如下所示)。

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.

*_ 是由于 Proc http://bugs.ruby-lang.org/issues/5694中带有选项参数的错误而存在的

于 2012-04-20T19:18:24.763 回答