2011-08-30 18 views
7

Utilizo carrierwave y mini_magick para subir imágenes. En desarrollo, todo está bien, pero en producción aumenta FloatDomainError (Infinity) cuando intento cargar una imagen. Tengo varios proyectos alojados en el mismo servidor y todo está bien con la carga. Uso Rails 3.0.10. ¿Alguna idea de cómo puedo solucionarlo? GraciasFloatDomainError (Infinity)

Respuesta

10

Tuve el mismo problema. El problema es mini_magick. Si el archivo de imagen en el que se ejecuta identify está erróneo, identificar dará como resultado algún tipo de error, p.

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

mini_magick intenta analizar el mensaje de error como la dimensión, y el resultado es 0. Esto resulta en una división por cero que da como resultado la excepción que mencionaste. Esta es la razón por la que solo falla con algunas imágenes.

identify tiene un -quiet opciones para desactivar estos mensajes de advertencia. He bifurcado mini_magick al https://github.com/fschwahn/mini_magick y he agregado la opción silenciosa. Espero que este cambio sea absorbido (o el problema se solucionará de una manera más elegante). Sin embargo, por ahora se puede usar el tenedor añadiendo lo siguiente a su Gemfile:

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

Gracias por su respuesta. Intentará tu tenedor lo antes posible. En proyectos actuales, comencé a usar rmagick en su lugar. –

+1

Mis cambios se han retirado y se ha lanzado una nueva versión de mini_magick, por lo que si depende de la última versión de mini_magick, los problemas deberían desaparecer. – fabi

+0

gracias. Lo intentaré tan pronto como lo necesite =) –

1

Se corrigió eso con la sustitución de resize_and_fill por resize_and_pad. Aún no entiendo su extraño comportamiento.

+0

en realidad 'resize_to_fill' y resize_and_pad' tienen diferentes efectos. reemplazar uno con otro es solo una forma de hacer que su aplicación se ejecute a cualquier precio. –

+0

De acuerdo. Esa fue una solución temporal solo para que funcione. Espero que la solución de @fabi funcione ahora –

0

Recibí este error con la última actualización de gemas, cuando generé una miniatura de imagen para mi archivo pdf.

Este código falla:

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

Lo resuelto mediante la sustitución de la orden de las líneas. La clave era que antes de cambiar el tamaño de MiniMagic primero debe convertir la miniatura a la imagen y después de eso debe intentar cambiar el tamaño.

Aquí está la solución que funcionó para mí. Quizás ayude a alguien.

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