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
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'
Naprawiono to, zastępując resize_and_fill
na resize_and_pad
. Nadal nie rozumiem jego dziwnego zachowania.
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ę. –
Zgadzam się. To było tymczasowe rozwiązanie tylko po to, aby działało. Mam nadzieję, że rozwiązanie @ fabi działa teraz –
używałem Ubuntu pakietu ImageMagick wersji 6.7. Zmieniłem wersję na 6.8, wykonując instrukcje tutaj: https://askubuntu.com/questions/267746/how-can-i-install-the-latest-upstream-version-of-imagemagick-without-compiling i zadziałało.
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]
Dziękuję za odpowiedź. Wypróbuję twojego widelca jak najszybciej. W obecnych projektach zacząłem używać rmagick. –
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
dzięki. Spróbuję go jak tylko będę potrzebował =) –