2012-09-04 6 views
6

プロダクションサーバーとは異なるS3バケットを使用するステージングサーバーのセットアップがありますが、ステージング時にイメージを表示するには、バケット間でイメージを手動で同期する必要があります。何千もの画像(日々成長している)があるので、これは実行可能ではありません。あるS3から画像を読み込み、別のS3に書き込む際にExcon :: Errors :: SocketErrorを取得しますか?

私たちのプロダクションS3からイメージを読み込むためにCarrierwaveを設定しても、私たちのプロダクションイメージストアを汚染しないようにステージングS3に新しいイメージを書き込むことはありますか?


UPDATE:私はこれを行うだろうCarrierWave用のカスタムストレージエンジンを作成する時に私の手を試してみた(ライン228を除く霧ストレージエンジンと--basically同じthis gistを参照)が、私は」画像を取得しようとしたときにこのエラーが発生する:

Excon::Errors::SocketError (hostname does not match the server certificate (OpenSSL::SSL::SSLError)): 
    lib/carrier_wave/storage/dual_fog.rb:214:in `exists?' 
    lib/carrier_wave/storage/dual_fog.rb:228:in `public_url' 
    lib/carrier_wave/storage/dual_fog.rb:267:in `url' 

誰でも知っていますか?要点のコードからわかるように、このソリューションはステージングから読み取ることができ、ステージングでイメージが見つからなければプロダクションにフォールバックすることができます。ただし、すべての書き込み操作はステージングに進む必要があります。

+1

ランダムな推測:ステージングバケットには「。その名前で? –

+0

@FrederickCheungええ、私たちの 'fog_host'は' assets.domain.com'に、 'fog_read_host'は' staging.assets.domain.com'に設定されています。それが問題の原因ですか? – neezer

+3

実際のs3バケットにドットが付いている場合(CNAMEに別名を付けても問題ありません)、ssl vertの検証は失敗します。ほとんどのブラウザ/ライブラリは* .domain.com証明書を直接サブドメインに対してのみ受け付けます。 foo.bar.domain.com –

答えて

2

S3を使用する方法はいくつかあります。バケットにドットがあり、SSLを実行する場合は、URLを次のようにする必要があります:https://s3.amazonaws.com/staging.asset.domain.com/blah。 amazonにはあなたの証明書がないので、https://yourdomain.com/blahは使用できません。また、証明書は1レベルしか深くないので、https://staging.asset.domain.com.s3.amazonaws.com/blahも使用できません。 (つまり、バケットに点がない場合は動作します)

関連する問題