2014-12-26 7 views
16

Si sta verificando un errore di certificato quando si tenta di connettersi al secchio S3 utilizzando Boto. Stranamente, questo si manifesta solo quando si accede a un bucket con punti nel suo nome WHILE in esecuzione su Heroku.Impossibile connettersi ai bucket S3 con periodi nel loro nome, quando si utilizza Boto su Heroku

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

Aumenta il seguente errore:

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

Ma lo stesso codice funziona bene quando viene eseguito a livello locale, e sarebbe anche lavorare su Heroku se il nome bucket erano 'ourcompany-immagini' invece di 'ourcompany. immagini

risposta

35

Secondo il relevant github issue, aggiungere questo alla configurazione:

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

Oppure, specificare il calling_format mentre istanziare un S3Connection:

from boto.s3.connection import OrdinaryCallingFormat 

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

Il codice ha funzionato per te a livello locale e non ha funzionato su Heroku, molto probabilmente, a causa delle diverse versioni di pitone utilizzata. Sospetto che tu stia utilizzando il runtime 2.7.9 su heroku, che ha enabled certificate checks for stdlib http clients.

+0

Bellissimo, grazie! – Yarin

+6

per tutti coloro che utilizzano il popolare wrapper Django-Storages, questo viene realizzato tramite settings.py della tua app come spiegato qui: https://django-storages.readthedocs.org/en/latest/backends/amazon-S3.html e qui : https://bitbucket.org/david/django-storages/issue/181/from-s3-import-callingformat-seems-broke – ecoe

+0

È caritatevole dire che questi link "spiegano" il problema! Ma il commento di Brad Bode su https://bitbucket.org/david/django-storages/issues/181/from-s3-import-callingformat-seems-broke#comment-10134874 ha risolto il problema per me. –