2011-08-30 19 views
7

Używam carrierwave i mini_magick do przesyłania zdjęć. W rozwoju wszystko jest w porządku, ale w produkcji podnosi FloatDomainError (Infinity), gdy próbuję przesłać obraz. Mam kilka projektów hostowanych na tym samym serwerze i wszystko jest w porządku z przesyłaniem. Używam Rails 3.0.10. Wszelkie pomysły, jak mogę to naprawić? DziękiFloatDomainError (Infinity)

Odpowiedz

10

Miałem ten sam problem. Problemem jest mini_magick. Jeśli plik obrazu, który działa identify jest błędny, identyfikator wygeneruje pewien błąd, np.

identify: Corrupt JPEG data: 7929 extraneous bytes before marker 0xed `image.jpg' @ warning/jpeg.c/EmitMessage/230. 
11811 8665 

mini_magick próbuje analizować komunikat o błędzie jak wymiar, a wynik jest 0. Powoduje to dzielenie przez zero, co powoduje wyjątek, o którym wspomniałeś. To jest powód, dla którego zawodzi tylko z niektórymi obrazami.

identify ma opcje -quiet, aby wyłączyć te komunikaty ostrzegawcze. Rozwinąłem mini_magick na https://github.com/fschwahn/mini_magick i dodano opcję cichą. Mam nadzieję, że ta zmiana zostanie wprowadzona (lub problem zostanie rozwiązany w bardziej elegancki sposób). Jednak teraz można używać widelca poprzez dodanie następujących do Gemfile:

gem 'mini_magick', :git => 'git://github.com/fschwahn/mini_magick.git' 
+0

Dziękuję za odpowiedź. Wypróbuję twojego widelca jak najszybciej. W obecnych projektach zacząłem używać rmagick. –

+1

Moje zmiany zostały wyciągnięte, a nowa wersja mini_magick została wydana, więc jeśli polegasz na najnowszej wersji mini_magick, problemy powinny zniknąć. – fabi

+0

dzięki. Spróbuję go jak tylko będę potrzebował =) –

1

Naprawiono to, zastępując resize_and_fill na resize_and_pad. Nadal nie rozumiem jego dziwnego zachowania.

+0

właściwie 'resize_to_fill' oraz resize_and_pad' mają różne efekty. zastąpienie jednego z drugim jest po prostu sposobem na uruchomienie aplikacji za wszelką cenę. –

+0

Zgadzam się. To było tymczasowe rozwiązanie tylko po to, aby działało. Mam nadzieję, że rozwiązanie @ fabi działa teraz –

0

Mam ten błąd z najnowszą aktualizacją gem, kiedy wygenerowałem miniaturę obrazu dla mojego pliku pdf.

Kod ten nie powiedzie się:

version :thumb do 
    process :resize_to_fill => [260, 192] 
    process :convert => :png 
    process :set_content_type 
    process :thumbnail_pdf 
end 

Rozwiązałem go zastępując kolejność wierszy. Kluczem było to, że przed zmianą rozmiaru MiniMagic powinien najpierw przekonwertować miniaturę na obraz, a potem powinien spróbować zmienić rozmiar.

Oto rozwiązanie, które zadziałało dla mnie. Może to pomoże komuś.

process :convert => :png 
    process :resize_to_fill => [260, 192]