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 "undefined method `cache_template_loading='"

En Rails 2.2.2 (no tengo conocimiento hasta el momento de publicar esta entrada si en otra versión también ocurre este error), me di cuenta que al ejecutar mi aplicacion en modo de "producción", arrojaba el siguiente error:


1 /usr/lib/ruby/gems/1.8/gems/rails-2.2.2/lib/initializer.rb:530:in `send': undefined method `cache_template_loading=' for ActionView::Base:Class (NoMethodError)
2 from /usr/lib/ruby/gems/1.8/gems/rails-2.2.2/lib/initializer.rb:530:in `initialize_framework_settings'
3 from /usr/lib/ruby/gems/1.8/gems/rails-2.2.2/lib/initializer.rb:529:in `each'
4 from /usr/lib/ruby/gems/1.8/gems/rails-2.2.2/lib/initializer.rb:529:in `initialize_framework_settings'
5 from /usr/lib/ruby/gems/1.8/gems/rails-2.2.2/lib/initializer.rb:526:in `each'
6 from /usr/lib/ruby/gems/1.8/gems/rails-2.2.2/lib/initializer.rb:526:in `initialize_framework_settings'
7 from /usr/lib/ruby/gems/1.8/gems/rails-2.2.2/lib/initializer.rb:154:in `process'
8 from /usr/lib/ruby/gems/1.8/gems/rails-2.2.2/lib/initializer.rb:112:in `send'
9 from /usr/lib/ruby/gems/1.8/gems/rails-2.2.2/lib/initializer.rb:112:in `run'
10 from /home/neoriddle/etc/rails_apps/miproyecto/config/environment.rb:13

Tomando en cuenta el volcado anterior en la ultima línea visible esta una referencia a la línea número 13 del archivo enviroment.rb, esa línea es la siguiente:


Rails::Initializer.run do |config|

Sabemos que en ejecutar esta línea se carga también el archivo de configuración específico del modo de ejecución (que podría ser "development", "test" o "production"), en mi caso al ejecutar el modo de producción, se generaba el error, de ahí que en la línea 13 del archivo de configuracion del modo produccion tiene lo siguiente:


config.action_view.cache_template_loading = true

Al parecer este método ya no existe en esta versión por lo que una solución es borrar o simplemente comentar esta línea. No estoy seguro si esta sea una solución correcta pero al menos elimina el error el cual no permite que el servicio se ejecute, es decir, el proceso se finaliza.

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.