2014-12-26 21 views
16

Otrzymujemy błąd certyfikatu podczas próby połączenia z naszym zasobnikiem S3 przy użyciu Boto. O dziwo, objawia się to tylko podczas uzyskiwania dostępu do wiadra z kropkami w nazwie WHILE działającego na Heroku.Nie można połączyć się z wiaderkami S3 z kropkami w nazwie podczas używania Boto na Heroku

from boto.s3.connection import S3Connection 
conn = S3Connection({our_s3_key}, {our_s3_secret}) 
bucket = conn.get_bucket('ourcompany.images') 

Podnosi się następujący błąd:

CertificateError: hostname 'ourcompany.images.s3.amazonaws.com' doesn't match either of '*.s3.amazonaws.com', 's3.amazonaws.com'

Ale ten sam kod działa poprawnie, gdy uruchamiane lokalnie, i będzie również działać na Heroku jeśli nazwa wiadro były „ourcompany-images” zamiast „ourcompany. zdjęcia

Odpowiedz

35

Według relevant github issue, dodać to do konfiguracji:

[s3] 
calling_format = boto.s3.connection.OrdinaryCallingFormat 

Albo określ calling_format podczas uruchamianiu się S3Connection:

from boto.s3.connection import OrdinaryCallingFormat 

conn = S3Connection(access_key, secret_key, calling_format=OrdinaryCallingFormat()) 

Kod pracował dla Ciebie lokalnie i nie działa na Heroku, najprawdopodobniej, ze względu na różne wersje Python używanych. Podejrzewam, że używasz runtime 2.7.9 na heroku, który ma enabled certificate checks for stdlib http clients.

+0

Piękna- Dziękujemy! – Yarin

+6

dla wszystkich, którzy korzystają z popularnego wrappera Django-Storages, jest to realizowane za pomocą pliku settings.py twojej aplikacji, jak wyjaśniono tutaj: https://django-storages.readthedocs.org/en/latest/backends/amazon-S3.html i tutaj : https://bitbucket.org/david/django-storages/issue/181/from-s3-import-callingformat-seems-broke – ecoe

+0

To miłosierne powiedzieć, że te linki "wyjaśniają" problem! Ale komentarz Brada Bode'a na https://bitbucket.org/david/django-storages/issues/181/from-s3-import-callingformat-seems-broke#comment-10134874 załatwił mi sprawę. –

Powiązane problemy