Привет, я бы выполнил простое задание по рейку, чтобы выполнить это.Это будет выглядеть примерно так (не проверено):
desc "port files to s3"
task :port => :environment do
AWS::S3::Base.establish_connection!(
:access_key_id => S3_CONFIG['access_key_id'],
:secret_access_key => S3_CONFIG['secret_access_key']
)
Images.all.each do |image|
new_image_path = "/images/#{image.id}/#{image.file_name_with_extension}"
AWS::S3::Object.store(new_image_path,open(image.current_path_to_image),S3_CONFIG['bucket_name'],:access => :public_read)
end
end
Несколько замечаний: если вы используете paperclip для управления и доступа к файлам, вы захотите сохранить их в s3, чтобы paperclip мог получить к ним доступ.Для этого используйте метод Paperclip::Interpolations.interpolate
.как:
new_image_path = Paperclip::Interpolations.interpolate("/accounts/:account_id/images/:id/:style/:basename.:extension",image,:small)
И это само собой разумеется - убедитесь, что вы проверите это в промежуточной среде!
Удачи.