2012-04-18 33 views
11

Tratando de encontrar una manera de cambiar el host de activos cuando se accede por un controlador determinado.Activar host de conmutador para el controlador

El protocolo https debe acceder estrictamente al controlador, por lo que necesito que el host de recursos se cambie a usar https. En este momento, el host de activos está configurado en un subdominio CNAME que está vinculado al S3 y no hay ningún certificado SSL asociado. Lo que intento lograr es reemplazar el host de activos actual con la URL https Amazon S3. Los únicos activos que me preocupan son los CSS y JS.

Estaba pensando en usar un ayudante para quitar el host de stylesheet_link_tag y javascript_include_tag y reemplazarlos con la URL https Amazon S3. Aunque me parece un poco hackish.

O tal vez hay una forma de cambiar los hosts de activos si request.ssl? ¿es verdad?

Estoy usando Rails 3.2.x.

Respuesta

16

Encuentra una solución para mi caso.

¿Terminé usando un Proc en config.action_controller.action_host en mi archivo de entorno de producción para manejar una lógica en request.ssl? y responder en consecuencia. Aquí está el código

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

'solicitud' se ajusta a cero para acomodar los casos en los que se llama asset_host en archivos de activos (CSS y JS si está usando las etiquetas auxiliares de activos). Dado que la solicitud no existe y si la solicitud no está asignada en los argumentos, entonces se generará el error cuando se compilan los activos (como se muestra a continuación).

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. 

El * _ está presente debido a un error con argumentos de opciones en Proc http://bugs.ruby-lang.org/issues/5694

+0

Esto es grande, mi aplicación es multi-Tennant y swaps bases de datos basadas en el subdominio, esta solución debería funcionar igual de bien para cambiar el subdominio para el asset_host. Una pregunta es, ¿cómo escribirías una prueba para esto? –

Cuestiones relacionadas