2013-03-27 2 views
1

버킷의 일부 내용을 다른 aws 계정의 버킷으로 복사하려고합니다. 먼저 업 로더 객체를 해시로로드합니다. 그런 다음 다른 버킷에 연결하고 해당 버킷의 자격 증명을 사용하여 자산을 저장하려고했습니다. 콘솔의 다른 하나의 버킷으로부터 단일 화상을 저장하려는CarboxWave Ruby gem을 사용하여 s3 버킷을 다른 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 

대상 버킷의 주소를 사용하지 않는 것을 알 수있다.

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

b3을 사용하여 s3cmd를 설치했습니다. 첫 번째 계정을 구성하고 버킷을 다운로드했습니다. 은 두 번째 계정에 대해이 계정을 구성하고 내용을 다른 버킷에 업로드했습니다. 그런 다음 aws 웹 콘솔에 로그인하고 폴더를 선택하고 작업 메뉴를 사용하여 내용을 공용으로 설정하십시오. – schwabsauce

답변

1

이렇게하면 버킷에 충분한 권한이 주어 지므로 실제로 이미지를 다운로드 할 수 있도록 충분한 권한을 이미지에 부여해야합니다.

나는 당신에게 더 좋은 해결책을 가지고 있습니다. 당신이 할 수있는 것은 s3cmd를 설치하고 구성하고 두 버킷 사이에 rsync를하는 것입니다. 그러면 레일에서 루비를 빠르게 처리 할 수 ​​있습니다.

+0

나를 s3cmd로 안내해 주셔서 감사합니다. 스크립트 또는 동기화에서 다른 계정의 두 버킷에 연결할 수 있다면 여전히 궁금합니다. – schwabsauce

관련 문제