回形针在使用 S3 时在本地查找文件以进行重新处理

Posted

技术标签:

【中文标题】回形针在使用 S3 时在本地查找文件以进行重新处理【英文标题】:Paperclip looking for file locally for reprocessing when using S3 【发布时间】:2012-06-20 13:58:52 【问题描述】:

我正在使用回形针将文件上传到 s3 存储。上传文件后,我将尝试使用 Jcrop 对其进行裁剪。当 logo.reprocess! 运行时,它会尝试在本地而不是在 s3 上查找文件,并给我一个 No such file or directory 错误。这是相关代码

  has_attached_file :logo,
    styles:  thumb: "145x75#", large: "500x500" ,
    :storage => :s3,
    :s3_credentials => "#Rails.root/config/s3.yml",
    :processors => [:cropper]

  def cropping_logo?
    !logo_crop_x.blank? && !logo_crop_y.blank? && !logo_crop_w.blank? && !logo_crop_h.blank?
  end

  def logo_geometry(style = :original)
    @geometry ||= 
    path = (logo.options[:storage]==:s3) ? logo.url(style) : logo.path(style)
    @geometry[style] ||= Paperclip::Geometry.from_file(path)
  end

  def reprocess_logo
      logo.reprocess!
  end

module Paperclip
  class Cropper < Thumbnail
    def transformation_command
      if crop_command
        crop_command + super.sub(/ -crop \S+/, '')
      else
        super
      end
    end

    def crop_command
      target = @attachment.instance
      if target.cropping_logo?
      " -crop '#target.logo_crop_w.to_ix#target.logo_crop_h.to_i+#target.logo_crop_x.to_i+#target.logo_crop_y.to_i'"
      end
    end
  end
end

这里有一些堆栈跟踪以寻求帮助

/usr/local/ruby/lib/ruby/1.9.1/fileutils.rb:1423:in `stat'
/usr/local/ruby/lib/ruby/1.9.1/fileutils.rb:1423:in `block in fu_each_src_dest'
/usr/local/ruby/lib/ruby/1.9.1/fileutils.rb:1439:in `fu_each_src_dest0'
/usr/local/ruby/lib/ruby/1.9.1/fileutils.rb:1421:in `fu_each_src_dest'
/usr/local/ruby/lib/ruby/1.9.1/fileutils.rb:391:in `cp'
paperclip (3.0.2) lib/paperclip/io_adapters/attachment_adapter.rb:53:in `copy_to_tempfile'
paperclip (3.0.2) lib/paperclip/io_adapters/attachment_adapter.rb:44:in `cache_current_values'
paperclip (3.0.2) lib/paperclip/io_adapters/attachment_adapter.rb:6:in `initialize'
paperclip (3.0.2) lib/paperclip/io_adapters/registry.rb:29:in `new'
paperclip (3.0.2) lib/paperclip/io_adapters/registry.rb:29:in `for'
paperclip (3.0.2) lib/paperclip/attachment.rb:91:in `assign'
paperclip (3.0.2) lib/paperclip/attachment.rb:279:in `reprocess!'

【问题讨论】:

【参考方案1】:

我也有同样的问题。我认为这与 Paperclip v3 代码有关。

我在 Gemfile 中指定使用旧版本。

# Gemfile
gem "paperclip", "~> 2.7.0" 

并且裁剪工作。我不确定这对你是否是一个好的解决方案,但它暂时对我有用。

【讨论】:

以上是关于回形针在使用 S3 时在本地查找文件以进行重新处理的主要内容,如果未能解决你的问题,请参考以下文章

无法使用回形针导轨上传到S3 5.配置选项无效:存储桶

在 S3 存储上使用回形针下载和上传的不同 URL

回形针可以从S3铲斗中读取照片几何图形吗?

如何使用回形针复制文件

仅将处理后的图像保存在回形针中

使用 Spring 集成轮询 S3 存储桶以获取文件