使用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)
答案 0 :(得分:3)
在我写完这样的初始化程序后,它开始工作了,在克服了几个问题之后,我认为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解决了这个问题。