2012-04-18 18 views
11

Cercando di trovare un modo per modificare l'host della risorsa quando si accede da un determinato controller.Scambia host risorsa per controller

Il controller deve essere rigorosamente accessibile dal protocollo https, quindi ho bisogno che l'host della risorsa venga passato all'utilizzo di https. Al momento l'host della risorsa è impostato su un sottodominio CNAME collegato a S3 e non vi è alcun certificato SSL associato. Quello che sto cercando di ottenere è sostituire l'host con l'URL di Amazon S3 https. Le uniche risorse di cui sono preoccupato sono i CSS e JS.

Stavo pensando di utilizzare un helper per rimuovere l'host da stylesheet_link_tag e javascript_include_tag e sostituirli con l'URL https di Amazon S3. Sembra un po 'scribacchiato per me.

O forse c'è un modo per cambiare gli host degli asset se request.ssl? è vero?

Sto usando Rails 3.2.x.

risposta

16

Capire una soluzione per il mio caso.

Terminato utilizzando un Proc su config.action_controller.action_host nel file dell'ambiente di produzione per gestire una logica su request.ssl? e rispondere di conseguenza. Ecco il codice

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

'richiesta' è impostato a zero per accogliere i casi in cui asset_host mettano in file di risorse (CSS e JS se si sta utilizzando i tag attivi di supporto). Poiché la richiesta non esiste e se la richiesta non viene assegnata negli argomenti, l'errore verrà generato quando le risorse vengono compilate (come mostrato di seguito).

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. 

Il * _ è presente a causa di un bug con gli argomenti delle opzioni in Proc http://bugs.ruby-lang.org/issues/5694

+0

Questo è grande, la mia applicazione è multi-Tennant e swap banche dati in base al sottodominio, questa soluzione dovrebbe funzionare altrettanto bene per cambiare il sottodominio per l'asset_host. Una domanda però è come scriveresti un test per questo? –

Problemi correlati