在S3

时间:2017-10-26 20:04:49

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

对于使用回形针照片(真实种子数据,而不是样本数据)的项目,我们有很多种子数据。我们也设置了使用带回形针的S3。加载我们的种子commonly suggested way已经非常慢了,我们还要增加更多的项目。种子已经花了大约5分钟的时间运行,所以它可能需要一两个小时才能运行,这使得标准的git分支式工作流程真的不切实际。我们可以将S3转为开发模式,但如果可能,请将development环境保持在production附近。

我一直在查看回形针文档,以了解我们是否可以重复使用S3链接,而无需每次都进行上传过程,并且无法找到任何内容。是否有回形针"标准"或友好的方式来解决这个问题?你是如何使用Paperclip / S3解决大量种子文件的?

谢谢!

1 个答案:

答案 0 :(得分:1)

如果我没弄错的话,Paper Clip只会将图像的文件名存储在数据库的一列中。如果是这种情况,那么您可以使用"常用的方法"为数据库播种一次。在Paper Clip播种数据库并将数据上载到S3后,您可以在数据库中查询文件名,文件大小和其他文件元数据。

然后,您可以使用数据库中的现有数据生成新的种子文件,以直接分配记录值(即不利用Paperclip)。

要启用创建新记录而不使用Paperclip处理它们,我建议您关注this example。将以下内容添加到您的模型中:

attr_accessor :skip_image_processing

before_asset_post_process :skip_image_processing?

def skip_image_processing?
  self.skip_image_processing
end

您甚至可以使用以下内容自动生成第二个种子文件:

@images_we_want_to_seed.each do |img|
   puts "Image.create("
   puts "  skip_image_processing: true,
   puts "  asset_file_name: img.asset_file_name,
   puts "  asset_file_size: img.asset_file_size,
   puts "  asset_content_type: image.asset_content_type,
     ....
   puts ")"
   puts " "
end

我没有测试过,但这应该可行。