在rails中将文件从虚拟服务器移动到云

时间:2011-05-20 12:53:30

标签: ruby-on-rails migration amazon-s3 paperclip

我在rails项目上有一个ruby 我有几千个与该网站相关的文件。 有没有一种简单的方法可以将所有文件从虚拟主机移动到云端(亚马逊)。

基本上我有很多图像,我使用paperclip gem来存储图像。已经有一些用户并且拥有数千张图像。现在我计划迁移到云(亚马逊)。我为此目的使用了aws-s3 gem,它适用于新图像。

但是如何放置已经上传的旧图像?

我是否必须手动压缩和重新上传?还是有更好的方法?

谢谢

1 个答案:

答案 0 :(得分:2)

嗨,我会做一个简单的rake任务来完成这个任务。它看起来像这样(未经测试):

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

一些注意事项:   如果您使用回形针来管理和访问文件,您需要将它们存储在s3中,以便回形针可以访问它们。为此,请使用Paperclip::Interpolations.interpolate方法。像:

new_image_path = Paperclip::Interpolations.interpolate("/accounts/:account_id/images/:id/:style/:basename.:extension",image,:small)

毋庸置疑 - 请确保在暂存环境中对此进行测试!

祝你好运。