一部のコンテンツをバケットから別のawsアカウントのバケットにコピーしようとしています。まず、アップローダーオブジェクトをハッシュにロードします。次に、他のバケットに接続し、そのバケットのクレデンシャルを使用してアセットを保存しようとしました。
task :product_color_images => :environment do
CarrierWave.configure do |c|
c.fog_credentials = {
:provider => 'AWS',
:aws_access_key_id => ENV['COPY_FROM_AWS_KEY_ID'],
:aws_secret_access_key => ENV['COPY_FROM_AWS_KEY']
}
c.fog_directory = 'orig-bucket' # bucket copied from
end
image_storage = {}
ProductImage.all.each do |image|
puts 'storing product image'
image_storage[image.id] = image.image
end
CarrierWave.configure do |c|
c.reset_config
c.fog_credentials = {
:provider => 'AWS',
:aws_access_key_id => ENV['COPY_TO_AWS_KEY_ID'],
:aws_secret_access_key => ENV['COPY_TO_AWS_KEY']
}
c.fog_directory = 'target-bucket' # bucket copied to
end
image_storage.each do |k, v|
image = ProductImage.find(k)
image.image = v
puts 'saving product image'
image.save
end
end
コンソールで1つのバケットから別のバケットに単一のイメージを保存しようとすると、ターゲットバケットのアドレスが使用されていないことがわかります。
ruby-1.9.2-p290 :026 > image = ProductImage.find(197)
ruby-1.9.2-p290 :027 > image.image = image_storage[197]
=> https://orig-bucket.s3.amazonaws.com/uploads/product_image/image/197/product_image.png
ruby-1.9.2-p290 :028 > image.save
ruby-1.9.2-p290 :029 > image.image
=> https://orig-bucket.s3.amazonaws.com/uploads/product_image/image/197/product_image.png