Невозможно подключиться к ведрам S3 с периодами от их имени, при использовании Boto на Heroku
Мы получаем ошибку сертификата при попытке подключиться к нашему ведро S3 с помощью Boto. Как ни странно, это проявляется только при доступе к ведру с периодами в его имени WHILE, работающем на Heroku.
from boto.s3.connection import S3Connection
conn = S3Connection({our_s3_key}, {our_s3_secret})
bucket = conn.get_bucket('ourcompany.images')
Вызывает следующую ошибку:
CertificateError: имя хоста 'ourcompany.images.s3.amazonaws.com' не соответствует ни одному из '*.s3.amazonaws.com', 's3.amazonaws.com'
Но тот же код отлично работает при запуске локально, а также будет работать на Heroku, если имя bucket было "ourcompany-images" вместо "ourcompany.images"
Ответы
Ответ 1
В соответствии с соответствующей проблемой github добавьте это в конфигурацию:
[s3]
calling_format = boto.s3.connection.OrdinaryCallingFormat
Или укажите calling_format
при создании S3Connection
:
from boto.s3.connection import OrdinaryCallingFormat
conn = S3Connection(access_key, secret_key, calling_format=OrdinaryCallingFormat())
Код работал для вас локально и не работал на героку, скорее всего, из-за использования разных версий python. Я подозреваю, что вы используете 2.7.9
runtime для heroku, у которого включена проверка сертификатов для http-клиентов stdlib.