Переключение хоста ресурсов для контроллера

Попытка выяснить способ изменения хоста ресурсов при доступе к определенному контроллеру.

Контроллер должен строго контролироваться протоколом https, поэтому мне нужно, чтобы хост-ресурс был переключен на использование https. На данный момент хост-ресурс настроен на субдомен CNAME, который связан с S3, и к нему нет сертификата SSL. То, что я пытаюсь достичь, заменяет хост текущего ресурса URL-адресом https Amazon S3. Единственные активы, о которых я беспокоюсь, - это CSS и JS.

Я думал об использовании помощника, чтобы удалить хост из stylesheet_link_tag и javascript_include_tag и заменить их URL-адресом https Amazon S3. Кажется немного хакерским для меня, хотя.

Или, возможно, есть способ изменить хосты ресурсов, если request.ssl? верно?

Я использую Rails 3.2.x.

Ответ 1

Выясните решение для моего случая.

Закончилось использование Proc в файле 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'
}

'request' установлен в nil для размещения случаев, когда object_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