ruby-on-rails - rails : sporadic Carrierwave/Excon errors

标签 ruby-on-rails carrierwave fog 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)

最佳答案

在我像这样编写初始化程序后,它又开始工作了,在克服了几个问题之后,我认为 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”时才开始工作。

后来我意识到指定该端点不是一个好主意,实际上最好将其保留在这种情况下。无论如何,更改为 lobati 指出的carrierwave-aws解决了问题。

关于ruby-on-rails - rails : sporadic Carrierwave/Excon errors,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28078436/

相关文章:

ruby-on-rails-4 - 将 simple_forms simple_field_for 与 Carrierwave 的多部分文件 uploader 一起使用

ruby-on-rails - 载波 :convert 出现问题

ruby-on-rails - 保护 s3 上的文件,仅从应用程序中的链接下载文件

ruby-on-rails - 使用 Carrierwave 和 Fog 将 Heroku 上的图像上传到 S3 时出现 403 错误

ruby-on-rails - Rails 3.2 - #<Array :. 的未定义方法 `where' .. - Model.where() 的查询

ruby-on-rails - ruby rails : Delete multiple hash keys

ruby-on-rails - 尝试使用Fog和Carrierwave将文件保存到Google Cloud Storage时出现"Excon::Error::Forbidden"错误

ruby-on-rails - 使用雾/webmock 进行 Rails 测试

css - Bootstrap Rails - 更改背景颜色,不起作用?

ruby-on-rails - Ruby on Rails 4 Redis 重用模型