读取rails种子文件后删除图像文件

时间:2018-06-02 01:09:36

标签: ruby-on-rails shrine

在rails种子文件中使用它来挑选随机图像。

Room.all.each do |room|
  count = rand(1..5)
  count.times do
    room.photos.create!(
        image: File.new(Dir['app/assets/images/sampleimages/*.jpg'].sample))
  end
end

但是在阅读它从我的资产文件夹中删除该图像之后。这可能是什么问题?以上代码是假设是这样做还是与shrine(图像上传器)有关?

使用版本Rails 5.2.0shrine 2.10.1

我的imageUploader.rb

class ImageUploader < Shrine
  include ImageProcessing::MiniMagick
  plugin :processing
  plugin :determine_mime_type
  plugin :remove_attachment
  plugin :store_dimensions
  plugin :validation_helpers
  plugin :versions
  plugin :pretty_location
  plugin :delete_raw

  Attacher.validate do
    validate_max_size 5.megabytes, message: 'is too large (max is 5 MB)'
    validate_mime_type_inclusion ['image/jpeg', 'image/png', 'image/gif']
  end

  def process(io, context)
    case context[:phase]
    when :store
      original = io.download
      pipeline = ImageProcessing::MiniMagick.source(original)
      size_300 = pipeline.resize_to_fit!(300, 300)
      size_150 = pipeline.resize_to_fill!(150, 150)
      original.close!
      {original: io, medium: size_300, thumb: size_150}
    end
  end
end

1 个答案:

答案 0 :(得分:1)

如果加载了delete_raw插件,原始文件对象将在上传后自动删除。建议在使用versions时加载此插件,因为您希望处理后的图像缩略图在上传后在本地删除。但是,它有一个不幸的副作用,默认情况下它也会删除输入文件。

分配的文件将上传到临时存储,因此您可以通过告知delete_raw插件仅删除上传到永久存储的原始文件来解决此问题:

plugin :delete_raw, storages: [:store]