2013-03-27 71 views
1

我試圖將一些內容從存儲桶複製到另一個aws帳戶中的存儲桶。我首先將上傳對象加載到散列中。然後我嘗試連接到另一個存儲桶並使用該存儲桶的憑據保存資產。將s3存儲桶複製到另一個aws帳戶CarrierWave Ruby gem

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 

試圖從一個桶保存單個圖像到另一在控制檯表明未使用的靶桶的地址。

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 
+0

我用brew來安裝s3cmd。 配置爲第一個帳戶並下載了存儲桶。 將其配置爲第二個帳戶並將內容上載到不同的存儲桶。 然後登錄到aws Web控制檯並選擇文件夾,使用操作菜單將內容設置爲公開。 – schwabsauce 2013-03-29 00:03:15

回答

1

SOmetimes它發生的時候,桶會給予足夠的權限也確保您有足夠的權限給圖像,以便您可以實際下載它們。

我有一個更好的解決方案,你可以做的是安裝和配置你的s3cmd並在兩個桶之間做一個rsync。這會讓你的紅寶石在軌道上更快。

+0

感謝您將我指向s3cmd。我仍然很好奇,如果有可能連接到腳本中的不同帳戶的兩個桶或同步。 – schwabsauce 2013-03-29 00:03:00

相關問題