2012-04-18 12 views
11

Belirli bir denetleyici tarafından erişildiğinde varlık ana bilgisayarını değiştirmenin bir yolunu bulmaya çalışın.Denetleyici için varlık ana makinesi anahtarı

Denetleyiciye https protokolü ile kesinlikle erişilebilmeleri için https kullanılarak değiştirilecek varlık ana bilgisayarına ihtiyacım var. Şu anda varlık ana bilgisayarı S3'e bağlı bir CNAME alt etki alanına ayarlanmış ve kendisine bağlı bir SSL sertifikası bulunmuyor. Elime ulaşmaya çalıştığım şey, mevcut varlık ana bilgisayarını https Amazon S3 URL'siyle değiştirmektir. Endişel olduğum tek varlıklar CSS ve JS içerir.

Ana makineyi stylesheet_link_tag ve javascript_include_tag adresinden çıkarmak ve bunları https Amazon S3 url ile değiştirmek için bir yardımcı bulmayı düşünüyordum. Yine de bana biraz hackish gibi görünüyor.

Ya da request.ssl ​​ise varlık ana bilgisayarlarını değiştirmenin bir yolu var mı? doğru?

Rails 3.2.x kullanıyorum.

cevap

16

Benim durumum için bir çözüm bul.

Üretim ortamı dosyamda Proc on config.action_controller.action_host kullanarak biten request.ssl'deki bir mantığı ele almak için? ve buna göre cevap verin. Burada (eğer varlık yardımcı etiketleri kullanıyorsanız CSS ve JS) asset_host öğesi dosyaları içinde denir durumları karşılamak için nil ayarlandığında kodu

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

'isteği' dir. İstek bulunmadığından ve istemlerde istek atanmamışsa, varlıklar derlendiğinde (aşağıda gösterildiği gibi) hata atılacaktır.

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. 

* _ nedeniyle, benim app çok Tennant ve bu alt etki dayalı veri tabanları, bu çözüm gibi çalışması gerekir takasları Proc http://bugs.ruby-lang.org/issues/5694

+0

bu harika seçeneği argümanlarla bir hatadan mevcut olduğu asset_host için alt alan adını değiştirmek iyi. Bir soru, bunun için nasıl bir test yazarsın? –