Bienvenido(a) a Proyecto Script

Hola!!!

Este es un buen lugar donde buscar las respuestas a tus dudas sobre "Programación", "Lenguajes", "Linux", "Electrónica", etc.

Suele ser difícil buscar en la red y encontrar respuestas claras y en español a muchas preguntas sobre estos temas, así que aquí tienes un buen lugar para iniciar.

Quieres ser parte de esto, solo ¡regístrate!

sábado, 31 de enero de 2009

Error "nil.dependencies" en `rake gems`

En la versión 2.2.2 de Rails, al ejecutar rake:gems aparece el siguiente mensaje (con alguna posible variación dependiendo de las gemas principalmente):


   1 neoriddle@neobalam ~/proyectos/miproyecto $ rake gems
   2 (in /home/neoriddle/proyectos/miproyecto)
   3  - [I] calendar_date_select >= 1.13
   4   - [ ] hoe = 1.8.2
   5   - [ ] rubyforge = 1.0.2
   6   - [I] rake = 0.8.3
   7  - [I] mini_magick >= 1.2.3
   8   - [ ] hoe = 1.8.2
   9   - [ ] rubyforge = 1.0.2
  10   - [I] rake = 0.8.3
  11  - [I] RedCloth >= 4.1.1
  12 rake aborted!
  13 You have a nil object when you didn't expect it!
  14 The error occurred while evaluating nil.dependencies
  15 
  16 (See full trace by running task with --trace)
  17 neoriddle@neobalam ~/proyectos/miproyecto $

Este es un error que hay en la versión de la gema, así que para solucionarlo hay que abrir el archivo /usr/lib/ruby/gems/1.8/gems/rails-2.2.2/lib/rails/gem_dependency.rb (esta ubicación podría variar por el sistema operativo o alguna opción en la instalación) y ubicar el siguiente fragmento de código:


   1 def dependencies
   2   return [] if framework_gem?
   3   all_dependencies = specification.dependencies.map do |dependency|
   4     GemDependency.new(dependency.name, :requirement => dependency.version_requirements)
   5   end
   6   all_dependencies += all_dependencies.map(&:dependencies).flatten
   7   all_dependencies.uniq
   8 end

Basta con agregar la siguiente línea return [] if specification.nil?, de manera que quedaría de la siguiente forma:


   1 def dependencies
   2   return [] if framework_gem?
   3   return [] if specification.nil?
   4   all_dependencies = specification.dependencies.map do |dependency|
   5     GemDependency.new(dependency.name, :requirement => dependency.version_requirements)
   6   end
   7   all_dependencies += all_dependencies.map(&:dependencies).flatten
   8   all_dependencies.uniq
   9 end

Una vez editado, hay que guardar los cambios y regresemos a ejecutar de nuevo la instrucción inicial rake:gems y el resultado es el siguiente:


   1 neoriddle@neobalam ~/proyectos/miproyecto $ rake gems
   2 (in /home/neoriddle/proyectos/miproyecto)
   3  - [I] calendar_date_select >= 1.13
   4     - [ ] hoe = 1.8.2
   5     - [ ] rubyforge = 1.0.2
   6     - [I] rake = 0.8.3
   7  - [I] mini_magick >= 1.2.3
   8     - [ ] hoe = 1.8.2
   9     - [ ] rubyforge = 1.0.2
  10     - [I] rake = 0.8.3
  11  - [I] RedCloth >= 4.1.1
  12     - [ ] echoe
  13 
  14 I = Installed
  15 F = Frozen
  16 R = Framework (loaded before rails starts)
  17 neoriddle@neobalam ~/proyectos/miproyecto $

Este es un bug en esta versión de Rails.

No hay comentarios: