【问题标题】:Imagemagick no such file or directory error in MacImagemagick 在 Mac 中没有这样的文件或目录错误
【发布时间】:2014-04-03 14:14:22
【问题描述】:

我正在使用carrierwave从我的rails应用上传图片,然后将该图片传递给resque以在后台调整它们的大小。图像已正确上传。 resque 尝试调整大小时的问题,mini_magick 说“没有这样的文件或目录”

这是我处理上传的 ImageController 代码

#create image and embed into story
def create
    img_attr =  params[:image]
    img_attr[:media] = params[:image][:media].first if params[:image][:media].class == Array

    image = Image.new img_attr
    @story.images << image
    if @story.save
        Resque.enqueue(ImageQueue,image.id)
        respond_to do |format|
            format.json {
                render :json => [image.to_jq_upload].to_json
            }
        end
    else
        render :json => [{:error => 'custom_failure'}], :status => 304
    end

end

这是我的 Resque 代码

class ImageQueue
@queue = :image_queue
def self.perform(image_id)
    image = Image.find image_id
    image.recreate_delayed_versions!
    image.save
end
end

这里设置了上传路径

def store_dir
    "uploads/stories/#{model.viewable_id}/res"
end

这是我得到的错误堆栈

No such file or directory - /uploads/stories/533d5b8756617390c0070000/res/636a8fe128.jpg
/Users/skmvasu/.rvm/gems/ruby-2.0.0-p451/gems/mini_magick-3.7.0/lib/mini_magick/image.rb:110:in `initialize'
/Users/skmvasu/.rvm/gems/ruby-2.0.0-p451/gems/mini_magick-3.7.0/lib/mini_magick/image.rb:110:in `open'
/Users/skmvasu/.rvm/gems/ruby-2.0.0-p451/gems/mini_magick-3.7.0/lib/mini_magick/image.rb:110:in `open'
/Users/skmvasu/repo/mangoweb/app/uploaders/image_uploader.rb:97:in `original_dimensions'
/Users/skmvasu/.rvm/gems/ruby-2.0.0-p451/gems/carrierwave-0.10.0/lib/carrierwave/uploader/processing.rb:84:in `block in process!'
/Users/skmvasu/.rvm/gems/ruby-2.0.0-p451/gems/carrierwave-0.10.0/lib/carrierwave/uploader/processing.rb:76:in `each'
/Users/skmvasu/.rvm/gems/ruby-2.0.0-p451/gems/carrierwave-0.10.0/lib/carrierwave/uploader/processing.rb:76:in `process!'

奇怪的是,相同的代码在我的 Linux 机器和我的生产机器上也能运行 Linux,但在我的新 Mac 上却不行。 ImageMagick 有问题吗?我正在通过 Homebrew 安装它。我什至尝试卸载它并使用源重新安装它,但这也不起作用。

我不确定我在这里做错了什么?请帮我解决这个问题。

【问题讨论】:

  • 这听起来像是 minimagick 让你悲伤,而不是 imagemagick 本身。你会考虑使用Rmagick 代替 minimagick 吗? rmagick.rubyforge.org 这是一个很好的链接:blog.paulopoiati.com/2013/01/28/… 在开发和生产机器上,我在 osx 和 ubuntu 中使用 rmagick 取得了很大的成功。 Rmagick 也完全兼容carrierwave。

标签: ruby-on-rails macos imagemagick carrierwave


【解决方案1】:

根据错误,

No such file or directory - /uploads/stories/533d5b8756617390c0070000/res/636a8fe128.jpg

636a8fe128.jpg 不存在于给定路径,即/uploads/stories/533d5b8756617390c0070000/res

/uploads/stories/533d5b8756617390c0070000/res 此路径中的一个或所有目录都不存在。我建议转到终端并浏览路径,看看它是否允许您更改目录,直到到达res 目录。如果是,则在res 目录中执行ls -l 并查看输出是否显示636a8fe128.jpg 文件。

更新

指定包含Rails.root的完整路径:

def store_dir 
  "#{Rails.root}/public/uploads/stories/#{model.viewable_id}/res" 
end

没有#{Rails.root}/public/,生成的路径是/uploads/stories/533d5b8756617390c0070000/res/636a8fe128.jpg,其中第一个/指向服务器的根目录。

【讨论】:

  • 不存在该文件。我已经验证过了。
  • 让我们在聊天 chat.stackoverflow.com/rooms/48530/ror 上讨论这个问题,因为它可能需要一点调试。
  • 其实这行不通。 resque 存在一些问题,此代码未执行。即使进行了此更改,它仍然会引发相同的错误。很抱歉造成混乱。
  • 根据聊天会话Actually that was the issue. I was looking at it in a different file. Thanks a lot. This saved me a lot of time :) 已解决。您一定已经重构了代码。如果不查看更改,我将无法帮助您。发布一个带有相关错误和支持代码的新问题总是好的,而不是不接受已接受的答案。
  • 对不起。我的错。我对我的发现提出了不同的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-01
  • 2021-10-31
  • 1970-01-01
  • 2018-12-22
  • 2021-04-16
  • 1970-01-01
相关资源
最近更新 更多