2013-12-09 16 views
34

Beim Staging stehe ich beim Hochladen und Ändern der Größe eines Bildes über carrierwave und minimagick vor dem folgenden Fehler. Auf Lokal funktioniert alles gut.Carrierwave, MiniMagick - NoMethodError: undefinierte Methode `size 'für nil: NilClass

carrierwave (0.9.0) mini_magick (3.7.0)

irb(main):003:0> PicturePost.create(remote_content_url: 'http://www.imagpress.com/img/slider/slider_1.jpg') 
NoMethodError: undefined method `size' for nil:NilClass 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/mini_magick-3.7.0/lib/mini_magick.rb:24:in `choose_processor' 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/mini_magick-3.7.0/lib/mini_magick.rb:64:in `mogrify?' 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/mini_magick-3.7.0/lib/mini_magick/image.rb:360:in `run_command' 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/mini_magick-3.7.0/lib/mini_magick/image.rb:171:in `valid?' 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/mini_magick-3.7.0/lib/mini_magick/image.rb:140:in `create' 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/mini_magick-3.7.0/lib/mini_magick/image.rb:48:in `read' 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/mini_magick-3.7.0/lib/mini_magick/image.rb:111:in `block in open' 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/mini_magick-3.7.0/lib/mini_magick/image.rb:110:in `open' 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/mini_magick-3.7.0/lib/mini_magick/image.rb:110:in `open' 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/carrierwave-0.9.0/lib/carrierwave/processing/mini_magick.rb:260:in `manipulate!' 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/carrierwave-0.9.0/lib/carrierwave/processing/mini_magick.rb:176:in `resize_to_fill' 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/carrierwave-0.9.0/lib/carrierwave/uploader/processing.rb:85:in `block in process!' 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/carrierwave-0.9.0/lib/carrierwave/uploader/processing.rb:81:in `each' 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/carrierwave-0.9.0/lib/carrierwave/uploader/processing.rb:81:in `process!' 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/carrierwave-0.9.0/lib/carrierwave/uploader/callbacks.rb:18:in `block in with_callbacks' 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/carrierwave-0.9.0/lib/carrierwave/uploader/callbacks.rb:18:in `each' 
9 levels... 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/carrierwave-0.9.0/lib/carrierwave/uploader/download.rb:65:in `download!' 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/carrierwave-0.9.0/lib/carrierwave/mount.rb:353:in `remote_url=' 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/carrierwave-0.9.0/lib/carrierwave/mount.rb:203:in `remote_content_url=' 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/carrierwave-0.9.0/lib/carrierwave/orm/activerecord.rb:44:in `remote_content_url=' 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/activerecord-3.2.15/lib/active_record/attribute_assignment.rb:85:in `block in assign_attributes' 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/activerecord-3.2.15/lib/active_record/attribute_assignment.rb:78:in `each' 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/activerecord-3.2.15/lib/active_record/attribute_assignment.rb:78:in `assign_attributes' 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/activerecord-3.2.15/lib/active_record/base.rb:498:in `initialize' 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/activerecord-3.2.15/lib/active_record/persistence.rb:44:in `new' 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/activerecord-3.2.15/lib/active_record/persistence.rb:44:in `create' 
from (irb):3 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/railties-3.2.15/lib/rails/commands/console.rb:47:in `start' 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/railties-3.2.15/lib/rails/commands/console.rb:8:in `start' 
from /home/deploy/apps/staging/blog/shared/bundle/ruby/1.9.1/gems/railties-3.2.15/lib/rails/commands.rb:41:in `<top (required)>' 
from script/rails:6:in `require' 

Kann nicht herausfinden, warum dies geschieht.

Antwort

53

Hatte vergessen, imagemagick auf meinem neuen Server zu installieren. Diese löste das Problem für mich

sudo apt-get install imagemagick 
+1

danke, es ist mein Problem einfach gelöst: D –

+1

vielen Dank dafür! – YoniGeek

+1

Wahrscheinlich hast du mir gerade Stunden gerettet! Vielen Dank für die Beantwortung Ihrer Frage, +1 –

2

Sieht aus wie ein Problem mit mini_magick 3.7.0. Werfen Sie einen Blick auf diese issue

1

Wenn Sie das yum Paket-Manager verwenden (wie ich bin für AWS Opsworks). Sie können

yum install ImageMagick 

Anmerkung tun: ImageMagick Dinkel als Camelcase

6

Dieser Fehler tritt auf, wenn MiniMagick für die Befehle sieht mogrify oder gm und nicht entweder einen zu finden.

Wie in einer anderen Antwort erwähnt, müssen Sie sicherstellen, dass ImageMagick oder GraphicsMagick mit einem Befehl wie

sudo apt-get install imagemagick 

jedoch installiert ist, kann dieses Problem auch auftreten, wenn ImageMagick in einem Nicht-Standard-Standort installiert ist und ist nicht auf dem Pfad des Rails-Prozesses verfügbar. Wenn Sie beispielsweise von Quelle in /usr/local/bin installieren, befindet sich dieser Speicherort möglicherweise nicht auf dem Pfad. In diesem Fall, um sicherzustellen, dass Ihr Weg richtig eingerichtet ist, fügen Sie diese Zeile zu application.rb, environments/production.rb oder einen anderen geeigneten Ort:

ENV['PATH'] += File::PATH_SEPARATOR + '/usr/local/bin' 

Beachten Sie, dass Sie Ihren Weg verschieden sein kann, je nachdem, wie die Anwendung gestartet wird, z.B von der Befehlszeile aus von einer System-Init-Datei, daher ist das Hinzufügen einer solchen Zeile wichtig, um sicherzustellen, dass MiniMagick unter allen Umständen korrekt funktioniert.

Unter Linux können Sie den Pfad eines laufenden Rails-Prozesses überprüfen, indem Sie die PID finden und dann /proc/<pid>/environ betrachten.

0

Wenn Sie eine IDE verwenden, kann das Problem wahrscheinlich nur durch einen Neustart der IDE behoben werden. Ich verbringe viel Zeit damit, eine Lösung für dieses Problem zu finden. Und diese einfache Operation hat für mich funktioniert.

+0

Es könnte ein seltsames Problem in der Entwicklungsumgebung sein, aber er sagte, das Problem tritt nur bei der Bereitstellung auf, nicht bei der Entwicklung. Wahrscheinlich benutzt er beim Staging 'nano',' vim' oder einen anderen Code-Editor, aber keine IDE. – markets

0

Für andere Leute, die Rails verwenden und stattdessen mini_magick verwenden, ändern Sie die Version auf 3.5 in Ihrer gemfile, da 3.6 für Bildupload mit mini_magick defekt ist und einfach nicht mit Version 3.7 funktioniert.

+0

Downgrade auf 3.5 verursacht: Errno :: ENOENT - Keine solche Datei oder Verzeichnis - identifizieren –

2

Homebrew & Yosemite-centric Antwort:

http://thornelabs.net/2014/12/08/libpng-not-symlinking-when-installing-imagemagick-on-os-x-yosemite.html

Sicher, müssen Sie ImageMagick neu zu installieren, aber wenn Lauf

brew install imagemagick 

Gibt Ihnen einen Fehler wie:

Error: The `brew link` step did not complete successfully 
The formula built, but is not symlinked into /usr/local 
Could not symlink share/man/man5/png.5 
/usr/local/share/man/man5 is not writable. 
... 

Überprüfen Sie zuerst, dass Ihr Benutzername hat die Erlaubnis, mit

ls -al /usr/local/share/man 

, wenn Sie dies nicht tun, müssen Sie

sudo chown -R yourusername /usr/local/share/man/man5 
brew link libpng 

Hoffnung das spart jemand ein paar Stunden laufen.

-B