ruby-on-rails - rails - ruby carrierwave tutorial
Carrierwave, MiniMagick-NoMethodError: método indefinido `size ''para nil: NilClass (7)
En la etapa, estoy enfrentando el siguiente error al cargar y cambiar el tamaño de una imagen a través de carrierwave y minimagick. En local todo funciona bien.
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''
No puedo entender por qué está sucediendo esto.
Parece que es un problema con mini_magick 3.7.0. Eche un vistazo a este problema
Si está usando el administrador de paquetes yum (como soy para AWS Opsworks). Tu puedes hacer
yum install ImageMagick
nota: ImageMagick deletreado como camelcase
Este error ocurre cuando MiniMagick busca los comandos mogrify
o gm
y no encuentra ninguno.
Como se menciona en otra respuesta, debe asegurarse de que ImageMagick o GraphicsMagick esté instalado con un comando como
sudo apt-get install imagemagick
Sin embargo, este problema también puede ocurrir si ImageMagick está instalado en una ubicación no estándar y no está disponible en la ruta del proceso Rails. Por ejemplo, si instala desde el origen en /usr/local/bin
, esa ubicación podría no estar en la ruta. En este caso, para asegurarse de que su ruta esté configurada correctamente, agregue esta línea a application.rb
, environments/production.rb
, u otro lugar apropiado:
ENV[''PATH''] += File::PATH_SEPARATOR + ''/usr/local/bin''
Tenga en cuenta que su ruta puede ser diferente dependiendo de cómo se inicia la aplicación, por ejemplo, desde la línea de comandos frente a un archivo init del sistema, por lo que es importante agregar una línea como esta para asegurarse de que MiniMagick funcione correctamente en cualquier circunstancia.
Bajo Linux, puede inspeccionar la ruta de un proceso de Rails en ejecución buscando el pid y luego mirando /proc/<pid>/environ
.
Si usa algún IDE, probablemente el problema se resuelva reiniciando IDE. Paso tanto tiempo tratando de encontrar una solución para este problema. Y esta simple operación funcionó para mí.
Para otras personas que usan Rails y usan mini_magick, cambia la versión a 3.5 en tu gemfile, ya que 3.6 está roto para la carga de imágenes con mini_magick y simplemente no funciona con la versión 3.7.
Había olvidado instalar imagemagick en mi nuevo servidor. Esto solucionó el problema para mí
sudo apt-get install imagemagick
Homebrew y respuesta centrada en Yosemite:
Claro, necesitarás reinstalar ImageMagick, pero si estás ejecutando
brew install imagemagick
Te da un error como:
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.
...
Primero, verifica que tu nombre de usuario tenga permiso con
ls -al /usr/local/share/man
si no lo hace, deberá ejecutar
sudo chown -R yourusername /usr/local/share/man/man5
brew link libpng
Espero que esto le ahorre a alguien algunas horas.
-SEGUNDO