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

私の場合の解決策を見つけてください。

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'
}

'request' は、asset_host がアセット ファイル (アセット ヘルパー タグを使用している場合は CSS および JS) で呼び出される場合に対応するために nil に設定されます。request が存在せず、args に request が割り当てられていない場合、アセットのコンパイル時にエラーがスローされます (以下を参照)。

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 に答える