2012-04-18 9 views
11

特定のコントローラーがアクセスしたときにアセットホストを変更する方法を見つけようとしています。コントローラーのアセットホストを切り替えます。

コントローラにはhttpsプロトコルで厳密にアクセスする必要があります。したがって、httpsを使用するようにアセットホストを切り替える必要があります。現時点では、資産ホストはS3にリンクされているCNAMEサブドメインに設定されており、SSL証明書が関連付けられていません。私が達成しようとしているのは、現在の資産ホストをhttps Amazon S3 URLに置き換えることです。私が心配している唯一の資産はCSSとJSです。

helloを使用してstylesheet_link_tagとjavascript_include_tagからホストを削除し、https Amazon S3のURLに置き換えることを考えていました。私には少しハックしたようだ。

または、おそらく、アセットホストを変更する方法がrequest.sslの場合はありますか?本当ですか?

私はRails 3.2.xを使用しています。

答えて

16

私の場合の解決方法を解説します。

私の実稼働環境ファイルでrequest.sslのロジックを処理するために、config.action_controller.action_hostのProcを使用して終了しましたか?それに応じて対応します。ここでは、コード

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

の要求が '(アセットヘルパータグを使用している場合、CSSやJS)asset_hostはアセットファイルに呼び出された場合に対応するためにnilに設定されています。要求は存在しないため、要求が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のサブドメインを変更します。 1つの質問ですが、これをテストする方法は? –

関連する問題