2011-08-30 5 views
7

Uso carrierwave e mini_magick per caricare immagini. Nello sviluppo va tutto bene, ma in produzione solleva FloatDomainError (Infinity) quando provo a caricare un'immagine. Ho diversi progetti ospitati sullo stesso server e tutto funziona correttamente con il caricamento. Io uso Rails 3.0.10. Qualche idea come posso risolverlo? GrazieFloatDomainError (Infinity)

risposta

10

Ho avuto lo stesso problema. Il problema è mini_magick. Se il file immagine che esegue identify su è errato, l'identificazione produrrà qualche tipo di errore, ad es.

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

mini_magick tenta di analizzare il messaggio di errore come dimensione, e il risultato è 0. Ciò si traduce in una divisione per zero che si traduce nell'eccezione che hai citato. Questo è il motivo per cui fallisce solo con alcune immagini.

identify dispone di un'opzione -quiet per disattivare questi messaggi di avviso. Ho biforcuto mini_magick a https://github.com/fschwahn/mini_magick e ho aggiunto l'opzione quiet. Spero che questo cambiamento venga inserito (o il problema verrà risolto in un modo più elegante). Tuttavia, per ora è possibile utilizzare la forchetta aggiungendo quanto segue al Gemfile:

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

Grazie per la risposta. Proverò la tua forcella al più presto. Nei progetti correnti ho iniziato a utilizzare invece rmagick. –

+1

Le mie modifiche sono state apportate e una nuova versione di mini_magick è stata rilasciata, quindi se si dipende dall'ultima versione di mini_magick i problemi dovrebbero andare via. – fabi

+0

grazie. lo proverò appena ne avrò bisogno =) –

1

Risolto il problema con la sostituzione di resize_and_fill a resize_and_pad. Ancora non capisco il suo strano comportamento.

+0

effettivamente 'resize_to_fill' e resize_and_pad' hanno effetti diversi. la sostituzione di uno con l'altro è solo un modo per far funzionare la tua applicazione a qualsiasi prezzo. –

+0

Accetto. Era una soluzione temporanea solo per farlo funzionare. Spero che la soluzione di @ fabi ora funzioni –

0

Ho ricevuto questo errore con il nuovissimo aggiornamento gemma, quando ho generato una miniatura dell'immagine per il mio file pdf.

Questo codice fallisce:

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

ho risolto sostituendo l'ordine delle linee. La chiave era che prima di ridimensionare MiniMagic dovresti prima convertire la miniatura in immagine e poi dovrebbe provare a ridimensionarla.

Ecco la soluzione che ha funzionato per me. Forse sarà d'aiuto per qualcuno.

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