Rails: спорадические ошибки Carrierwave/Excon

Используя операторскую волну для наших загрузчиков, мы получаем пару ошибок 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)

person lobati    schedule 21.01.2015    source источник
comment
Вам удалось это исправить?   -  person RuiMochila    schedule 03.02.2015
comment
После перехода на carrierwave-aws этой проблемы больше не было.   -  person lobati    schedule 15.07.2015


Ответы (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».

Позже я понял, что не стоит указывать эту конечную точку, на самом деле лучше оставить ее в этой ситуации. В любом случае, переход на несущую волну-aws, как указал lobati, решил проблему.

person RuiMochila    schedule 03.02.2015
comment
Вы видели постоянные ошибки или они были прерывистыми? По большей части наши работали, мы просто получали ошибку раз в день или два. В итоге мы перешли на гем carrierwave-aws и пока не обнаружили никаких ошибок. . - person lobati; 03.02.2015
comment
Спасибо, что обратили внимание на carswave-aws, я проверю. Я получал постоянные ошибки на некоторых изображениях, в то время как другие работают нормально. Я не понимаю, что происходит, потому что я ничего не менял, и он перестал работать... У меня есть два проекта с одинаковыми настройками, один работает отлично, другой всегда выдает такие ошибки.. - person RuiMochila; 04.02.2015
comment
Пожалуйста, игнорируйте предыдущий. Спасибо за рекомендацию перевозчика, я проверю. Я получал постоянные ошибки на некоторых изображениях, в то время как другие работают нормально. Я не понимаю, что происходит, потому что я ничего не менял, и он перестал работать... У меня есть два проекта с одинаковыми настройками, один работает отлично, другой всегда выдает такие ошибки... - person RuiMochila; 04.02.2015
comment
Также у меня возникают конфликты с URL-адресами. В проекте, который не работает должным образом, когда я загружаю что-то на S3, URL-адрес, сохраненный в моей базе данных, выглядит примерно так: s3.amazonaws.com/‹bucket-name›/‹path-to-image›, это дает мне 301, когда я пытаюсь это сделать. До всего этого он сохранял URL-адреса типа s3 -eu-west-1.amazonaws.com/‹bucket-name›/›, и они сработали. Но в проекте, над которым я сейчас работаю, сохраняются такие URL-адреса, как https://‹bucket-name›.s3.amazonaws.com/‹path-to-image›, и они также работают хорошо. Я попытаюсь выяснить, что здесь происходит... - person RuiMochila; 04.02.2015
comment
Да, указание конечной точки было связано с URL-адресами, это не очень хорошая идея. - person RuiMochila; 04.02.2015
comment
Я думаю, что туман недавно изменил способ обработки конечной точки, так что это могло вызвать у вас проблему. Надеемся, чтоCARSWAY-AWS все исправит для вас. - person lobati; 04.02.2015