2012-09-04 3 views
6

Wir haben einen Staging-Server eingerichtet, um einen anderen S3-Bucket von unserem Produktionsserver zu verwenden. Dazu müssen jedoch die Bilder manuell zwischen den Buckets synchronisiert werden, damit die Bilder beim Staging angezeigt werden. Da wir Zehntausende Bilder haben (die täglich wachsen), ist dies nicht praktikabel.Excon :: Errors :: SocketError beim Lesen von Bildern von einem S3 erhalten und zu einem anderen schreiben?

Gibt es trotzdem eine Konfiguration von Carrierwave, um Bilder aus unserer Produktion S3 zu lesen, aber neue Bilder in Staging S3 zu schreiben (um unseren Produktionsbildspeicher nicht zu verunreinigen)?


UPDATE: Ich habe meine Hand versuche, eine benutzerdefinierten Speicher-Engine für CarrierWave zu schaffen, die dies tun würden (siehe this gist --basically identisch mit der Nebel-Speicher-Engine mit Ausnahme der Linie 228), aber ich Ich bekomme diesen Fehler beim Abrufen von Bildern:

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' 

Wer weiß, warum das ist? Wie Sie aus dem Quellcode entnehmen können, möchte ich, dass diese Lösung vom Staging und Fallback in die Produktion lesen kann, wenn beim Staging kein Bild gefunden wird. Alle Schreiboperationen sollten jedoch nur auf Staging übertragen werden.

+1

Zufallsraten: Hat Ihr Staging-Bucket ein '.' in seinem Namen? –

+0

@FrederickCheung Ja, unser 'fog_host' ist auf 'assets.domain.com' gesetzt und der' fog_read_host' ist auf 'staging.assets.domain.com' gesetzt. Gibt es Probleme? – neezer

+3

Wenn der eigentliche s3-Bucket einen Punkt hat (es spielt keine Rolle im CNAME-Alias), dann wird die ssl vert-Validierung fehlschlagen - die meisten Browser/Bibliotheken akzeptieren ein * .domain.com-Zertifikat nur für direkte Subdomains, nicht für foo.bar.domain.com –

Antwort

2

Es gibt mehrere Möglichkeiten, S3 zu verwenden. Wenn Sie Punkte in Ihrem Bucket haben und SSL verwenden möchten, müssen Sie Ihre URLs wie folgt aussehen lassen: https://s3.amazonaws.com/staging.asset.domain.com/blah. Sie können https://yourdomain.com/blah nicht verwenden, da Amazon Ihr Zertifikat nicht besitzt. Sie können auch https://staging.asset.domain.com.s3.amazonaws.com/blah nicht verwenden, da die Zertifikate nur eine Ebene tief gehen. (d. h. wenn Ihr Bucket keine Punkte hätte, würde es funktionieren.)

Verwandte Themen