2011-06-27 18 views
9

Używam MiniMagick do zmiany rozmiaru obrazu na zdjęciach przesłanych w formie wieloczęściowej. Muszę wygenerować kilka różnych typów obrazów z pierwotnie przesłanego pliku. Oto kod, który jest wykonywanie obróbki obrazu:Skąd się biorą pliki tymczasowe podczas używania MiniMagick w aplikacji Ruby on Rails?

// 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 jest ścieżką do obrazu w folderze public. Funkcja miniatur działa perfekcyjnie. Kiedy aplikacja zacznie przetwarzać przyciętą wersję, to tam zaczynają się łamać i nie mogę tego zrozumieć. I pojawia się następujący błąd, gdy z tego kodu:

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

czytałem kilka rzeczy na temat możliwych warunkach wyścigowych z śmieciarza w szynach, ale nie był w stanie rozwiązać ten problem. Próbowałem tego również z konsoli i mogłem tworzyć instancje MiniMagick, ale otrzymałem tam także błąd No such file. W tym momencie nie mam pojęcia, gdzie się udać, więc mam nadzieję, że ktoś tutaj ma pomocne wskazówki. Dzięki za pomoc!

Szczegóły:

  • OS: Ubuntu (Lucid Lynx)
  • Szyny wersja: 3.0.7
  • Ruby Version: 1.8.7
  • MiniMagick Wersja: 3,3
+0

Czy praca kod upraw jeśli wykomentuj wiersze miniaturek powyżej? – Joshua

+0

Hmmm ... Nie próbowałem tego. Wracam do tego projektu, więc sprawdzę to i opublikuję wyniki. –

Odpowiedz

3

to prawdopodobnie stan wyścigu, o którym tutaj mowa:

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

oto jeden dylemat:

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

alternatywnie, i prawdopodobnie łatwiejsze, można spróbować to:

// 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)) 
7

Czy zainstalowany ImageMagick? Jeśli nie, spróbuj sudo apt-get install ImageMagick , a następnie ponownie uruchom serwer WEBrick

+4

To jest właściwe polecenie => sudo apt-get install imagemagick –