ruby-on-rails - ImageMagick 和 Paperclip 找不到我的文件在 S3 (Jcrop) 上的位置

标签 ruby-on-rails amazon-s3 imagemagick paperclip jcrop

我正在尝试允许在我的应用程序上进行裁剪。但是,当我运行此方法时:

  def avatar_geometry(style = :original)
    @geometry ||= {}
    @geometry[style] ||= Paperclip::Geometry.from_file avatar.path(style)
  end


identify: unable to open image `/original/4/nutra.jpg': No such file or directory @ error/blob.c/OpenBlob/2587.
Paperclip::NotIdentifiedByImageMagickError: /original/4/nutra.jpg is not recognized by the 'identify' command.
    from /Users/skline/.rvm/gems/ruby-1.9.2-p180@nutra/gems/paperclip-cloudfiles-2.3.10.1/lib/paperclip/geometry.rb:26:in `from_file'
    from /Users/skline/NutraNation1/app/models/user.rb:111:in `avatar_geometry'
    from (irb):2
    from /Users/skline/.rvm/gems/ruby-1.9.2-p180@nutra/gems/railties-3.0.7/lib/rails/commands/console.rb:44:in `start'
    from /Users/skline/.rvm/gems/ruby-1.9.2-p180@nutra/gems/railties-3.0.7/lib/rails/commands/console.rb:8:in `start'
    from /Users/skline/.rvm/gems/ruby-1.9.2-p180@nutra/gems/railties-3.0.7/lib/rails/commands.rb:23:in `<top (required)>'
    from script/rails:6:in `require'
    from script/rails:6:in `<main>'

Paperclip 中的违规代码如下所示:

def self.from_file file
      file = file.path if file.respond_to? "path"
      geometry = begin
                   Paperclip.run("identify", "-format %wx%h :file", :file => "#{file}[0]")
                 rescue Cocaine::ExitStatusError
                   ""
                 rescue Cocaine::CommandNotFoundError => e
                   raise Paperclip::CommandNotFoundError.new("Could not run the `identify` command. Please install ImageMagick.")
                 end
      parse(geometry) ||
        raise(NotIdentifiedByImageMagickError.new("#{file} is not recognized by the 'identify' command."))
    end

我的头像模型如下所示:

AVATAR_SW = 55
  AVATAR_SH = 55
  AVATAR_NW = 240
  AVATAR_NH = 240

  has_attached_file :avatar,
        :styles => { :normal => ["#{AVATAR_NW}x#{AVATAR_NH}>", :jpg],
                     :small => ["#{AVATAR_SW}x#{AVATAR_SH}#", :jpg] }, :storage => :s3,
       :s3_credentials => "#{RAILS_ROOT}/config/s3.yml",
       :path => "/:style/:id/:filename"

我给Paperclip在我的development.rb中找到ImageMagick的路线是这样的: Paperclip.options[:command_path] = "/usr/local/bin/" 我已经验证过的是确实是 ImageMagick 的家。

有趣的是我可以毫无问题地上传图像。只是当我尝试运行此方法来裁剪它们时,我遇到了问题。有什么建议。使用回形针 (2.3.11)

最佳答案

这适用于 s3 和本地

def photo_geometry(style = :original)
  @geometry ||= {}
  path = (avatar.options[:storage]==:s3) ? avatar.url(style) : avatar.path(style)
  @geometry[style] ||= Paperclip::Geometry.from_file(path)
end

关于ruby-on-rails - ImageMagick 和 Paperclip 找不到我的文件在 S3 (Jcrop) 上的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6358228/

相关文章:

python - 如何使用 boto3 将标签添加到 S3 存储桶而不删除现有标签?

amazon-web-services - Amazon S3 公共(public)访问价格?

java - im4java 转换为 jpg,图像崩溃

ruby-on-rails - 如何在 ruby​​ on rails 中将用户上传的图片转换为 webp

ruby-on-rails - 使用 AJAX 更新需要字符串数组的 Rails 列

javascript - 如何在 Rails 4 中检查复选框及其值来提交表单?

python - 从 Amazon S3 迁移到 Azure 存储(Django Web 应用程序)

Imagemagick:如何在图像下方添加带有文本的边框?

ruby-on-rails - 将带有 React 组件的 Ruby on Rails 项目部署到 Heroku

ruby-on-rails - Rails 4.1 和 4.2 之间 ActiveRecord Setter 的区别?