Куда переходят временные файлы при использовании MiniMagick в приложении Ruby on Rails? - PullRequest
9 голосов
/ 27 июня 2011

Я использую 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)
  • Rails Версия: 3.0.7
  • Версия Ruby: 1.8.7
  • Версия MiniMagick: 3.3

Ответы [ 2 ]

7 голосов
/ 21 июня 2012

Вы установили ImageMagick? Если не, попробуйте sudo apt-get install ImageMagick, а затем перезапустите сервер Webrick

3 голосов
/ 31 октября 2011

это, вероятно, условие гонки, которое упомянуто здесь:

https://ar -code.lighthouseapp.com / проекты / 35 / билеты / 6-раса-состояние-с 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))
...