2012-04-18 67 views
11

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

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

我正在考虑使用助手从stylesheet_link_tag和javascript_include_tag去除主机,并将其替换为https Amazon S3 url。虽然对我来说似乎有点ha ha。

或者也许有一种方法来改变资产主机,如果request.ssl?是真的?

我正在使用Rails 3.2.x.

回答

16

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

在我的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' 
} 

“请求”设为零,以适应那里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. 

的* _存在由于与PROC http://bugs.ruby-lang.org/issues/5694

+0

这是很好的选择参数的错误,我的应用程序是多坦和其掉期交易基础上的子域的数据库,这个解决方案应该工作一样以及更改asset_host的子域名。一个问题是,你如何为此写一个测试? – 2013-03-07 11:42:27