在Ruby on Rails应用程序中使用MiniMagick时,临时文件在哪里?

Zac*_*sch 9 ruby-on-rails minimagick

我正在使用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))
Run Code Online (Sandbox Code Playgroud)

new_urlpublic文件夹中图像的路径.缩略图例程非常有效.当应用程序开始处理裁剪版本时,这就是事情开始破坏的地方,我不能为我的生活弄清楚.从此代码中我收到以下错误:

No such file or directory - /tmp/mini_magick20110627-10055-2dimyl-0.jpg
Run Code Online (Sandbox Code Playgroud)

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

细节:

  • 操作系统:Ubuntu(Lucid Lynx)
  • Rails版本:3.0.7
  • Ruby版本:1.8.7
  • MiniMagick版本:3.3

小智 7

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

  • 这是实际的命令=> sudo apt-get install imagemagick (4认同)

Til*_*ilo 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))
Run Code Online (Sandbox Code Playgroud)