tutorial rails images aws ruby-on-rails ruby ruby-on-rails-3 carrierwave minimagick

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:

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

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