Usando aws / s3 gem em regiões fora dos EUA

Se você tentar usar a gema ‘aws / s3’ para um intervalo que não foi criado na região dos EUA, receberá um erro AWS :: S3 :: PermanentRedirect:

AWS::S3::Base.establish_connection!(
:access_key_id => 'KEY',
:secret_access_key => 'SECRET'
)
#<AWS::S3::Connection:0x007f9c82a0ef58 @options={:server=>"s3.amazonaws.com", :port=>80, :access_key_id=>"KEY", :secret_access_key=>"SECRET"}, @access_key_id="ID", @secret_access_key="SECRET", @http=#<Net::HTTP s3.amazonaws.com:80 open=false>>

bucket
= AWS::S3::Bucket.find('mybucket')
AWS
::S3::PermanentRedirect: The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.

Uma solução rápida para isso é atualizar o DEFAULT_HOST do módulo se todos os seus intervalos estiverem na mesma região, assim:

AWS::S3::DEFAULT_HOST = "s3-eu-west-1.amazonaws.com"

AWS
::S3::Base.establish_connection!(
:access_key_id => 'KEY',
:secret_access_key => 'SECRET'
)
#<AWS::S3::Connection:0x007fc26b913090 @options={:server=>"s3-eu-west-1.amazonaws.com", :port=>80, :access_key_id=>"KEY", :secret_access_key=>"SECRET"}, @access_key_id="ID", @secret_access_key="SECRET", @http=#<Net::HTTP s3-eu-west-1.amazonaws.com:80 open=false>>

AWS
::S3::Bucket.find('mybucket')
#<AWS::S3::Bucket:0x007fc26bab4048 @attributes={">Você pode então se conectar com sucesso.