9

我正在使用 MiniMagick 对通过多部分表单上传的图像执行一些图像大小调整。我需要从最初上传的文件中生成几种不同类型的图像。这是执行图像处理的代码:

// Generates a thumbnail image
mm = MiniMagick::Image.open(Rails.root.join('public', 'uploads', new_url))
mm.resize(thumbnail_dimensions.join("x"))
mm.write(Rails.root.join('public', 'uploads', "t_"+new_url))

// Generates cropped version
mm_copy = MiniMagick::Image.open(Rails.root.join('public', 'uploads', new_url))
mm_copy.crop('200x200')
mm_copy.write(Rails.root.join('public', 'uploads', "c_"+new_url))

new_url是文件夹中图像的路径public。缩略图例程完美运行。当应用程序开始处理裁剪后的版本时,这就是事情开始破裂的地方,我一生都无法弄清楚。从此代码收到以下错误:

No such file or directory - /tmp/mini_magick20110627-10055-2dimyl-0.jpg

我在 Rails 中使用垃圾收集器阅读了一些关于可能的竞争条件的内容,但我无法解决这个问题。我也从控制台尝试过这个,并且可以创建 MiniMagick 实例,但也在No such file那里收到错误。在这一点上,我不知道去哪里,所以我希望这里有人能提供一些有用的建议。谢谢你的帮助!

详情

  • 操作系统:Ubuntu (Lucid Lynx)
  • 导轨版本:3.0.7
  • 红宝石版本:1.8.7
  • MiniMagick 版本:3.3
4

2 回答 2

7

你安装了 ImageMagick 吗?如果没有,请尝试sudo apt-get install ImageMagick,然后重新启动您的 webrick 服务器

于 2012-06-21T05:54:55.110 回答
3

这可能是这里提到的竞争条件:

https://ar-code.lighthouseapp.com/projects/35/tickets/6-race-condition-with-temp_file

这是一个修复:

http://rubyforge.org/tracker/index.php?func=detail&aid=9417&group_id=1358&atid=5365

或者,可能更容易,你可以试试这个:

// Generates a thumbnail image
mm = MiniMagick::Image.open(Rails.root.join('public', 'uploads', new_url))
mm_copy = mm.clone   # clone the opened Image, instead of re-opening it

mm.resize(thumbnail_dimensions.join("x"))
mm.write(Rails.root.join('public', 'uploads', "t_"+new_url))

// Generates cropped version
mm_copy.crop('200x200')
mm_copy.write(Rails.root.join('public', 'uploads', "c_"+new_url))
于 2011-10-31T16:46:23.790 回答