Rails: спорадические ошибки Carrierwave/Excon
Используя carrierwave для наших загрузчиков, мы каждую неделю получаем пару ошибок Excon из нашего производственного приложения. Например:
Excon::Errors::BadRequest: Expected(200) <=> Actual(400 Bad Request) excon.error.response :body => "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Error><Code>IncompleteBody</Code><Message>The request body terminated unexpectedly</Message>
Мы начали оборачивать процесс загрузки в блок повторных попыток, и, кажется, после очередной попытки он всегда работает нормально, но мне интересно, есть ли лучшее решение, поскольку через некоторое время это становится громоздким. Мне кажется, что эти ошибки должны быть обработаны на более низком уровне. Есть ли лучший способ справиться с этими проблемами?
Вот наша производственная конфигурация:
config.storage = :fog
config.root = Dir.tmpdir
config.cache_dir = 'carrierwave'
config.fog_credentials = {
provider: 'AWS',
aws_access_key_id: ENV['AWS_ACCESS_KEY_ID'],
aws_secret_access_key: ENV['AWS_ACCESS_KEY'],
}
config.fog_directory = ENV['AWS_S3_BUCKET']
config.fog_public = false
config.fog_authenticated_url_expiration = 7.days.to_i
config.enable_processing = true
И мы используем версии Gem:
fog (1.27.0)
carrierwave (0.10.0)
excon (0.43.0)
1 ответ
Он снова начал работать после того, как я написал свой инициализатор следующим образом, после преодоления нескольких проблем, я думаю, что конечные точки AWS изменились:
CarrierWave.configure do |config|
config.fog_credentials = {
:provider => 'AWS',
:aws_access_key_id => ENV['S3_KEY'],
:aws_secret_access_key => ENV['S3_SECRET'],
:endpoint => "https://s3.amazonaws.com",
:region => ENV['S3_REGION']
}
config.fog_directory = ENV['S3_BUCKET']
end
Кроме того, я думал, что мой регион был "us-west-2", глядя на консоль администрирования AWS, но он начал работать только после того, как я перешел на "eu-west-1".
Позже я понял, что не стоит указывать эту конечную точку, на самом деле лучше оставить ее в этой ситуации. В любом случае, переход на carrierwave-aws, как указал Лобати, решил проблему.