Ruby on Rails and Rake problems: constante no inicializada Rake :: DSL

Estoy teniendo un problema realmente frustrante: Rake está siendo tonto.

Así es como se produce el problema:

$ rails new test_app $ rails generate scaffold new_scaffold field1:string field2:text 

Ambos funcionan bien, pero cuando lo hago,

 $ rake db:migrate 

Obtuve el siguiente error.

 (in /home/mikhail/test_app) rake aborted! uninitialized constant Rake::DSL /usr/lib/ruby/1.9.1/rake.rb:2482:in `const_missing' /usr/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/tasklib.rb:8:in `' /usr/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/tasklib.rb:6:in `' /usr/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/tasklib.rb:3:in `' /usr/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/rdoctask.rb:20:in `require' /usr/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/rdoctask.rb:20:in `' /usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks/documentation.rake:1:in `require' /usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks/documentation.rake:1:in `' /usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks.rb:15:in `load' /usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks.rb:15:in `block in ' /usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks.rb:6:in `each' /usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks.rb:6:in `' /usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/application.rb:214:in `require' /usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/application.rb:214:in `initialize_tasks' /usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/application.rb:139:in `load_tasks' /usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/application.rb:77:in `method_missing' /home/mikhail/test_app/Rakefile:7:in `' /usr/lib/ruby/1.9.1/rake.rb:2373:in `load' /usr/lib/ruby/1.9.1/rake.rb:2373:in `raw_load_rakefile' /usr/lib/ruby/1.9.1/rake.rb:2007:in `block in load_rakefile' /usr/lib/ruby/1.9.1/rake.rb:2058:in `standard_exception_handling' /usr/lib/ruby/1.9.1/rake.rb:2006:in `load_rakefile' /usr/lib/ruby/1.9.1/rake.rb:1991:in `run' /usr/bin/rake:31:in `' 

He buscado en Internet errores similares / similares, y la gente los ha tenido. ¡Simplemente nadie parece resolver el problema!

¿Cómo soluciono este problema?

Un tweet de DHH anterior. Rake .9.0 rompe Rieles y varias otras cosas, necesita:

 gem "rake", "0.8.7" 

en tu Gemfile

Hice algunas investigaciones justo después de mi respuesta anterior (lo siento, debo hacerlo antes).

Todos los problemas se resuelven con Rake gem 0.9.2. Seguí estos pasos:

  • Instalé gem install rake -v=0.9.2 (tuve la gem 0.9.1)
  • eliminó 0.9.1 con gem uninstall rake -v=0.9.1
  • actualizado con la bundle update
  • a continuación, db:migrate mostró una advertencia, WARNING: Global access to Rake DSL methods is deprecated. Please.... WARNING: Global access to Rake DSL methods is deprecated. Please....

    Se resolvió agregando lo siguiente al archivo Rake.

     module ::YourApplicationName class Application include Rake::DSL end end 
  • Omití el module ::RakeFileUtils extend Rake::FileUtilsExtend opción module ::RakeFileUtils extend Rake::FileUtilsExtend sugerida por @databyte.

¡Significa que el Rake gem 0.9.2 funciona bien!

Pasando por el Capítulo 2 de Railstutorial (demo_app) y encontré este problema. Probé todas las demás respuestas que figuran aquí, pero no pude hacerlo funcionar hasta que hice esto:

Pon esto en tu Rakefile de arriba, requiere ‘rake’:

 require 'rake/dsl_definition' 

¿Cómo solucionar el problema Rake :: DSL constante no inicializada en Heroku?

También volví a comprometerme y envié todos los archivos a Github y Heroku.

Todo lo que necesitaba hacer era usar:

 gem install rake 

Ya tenía la versión 0.9.2, solo necesitaba instalarla.

Reinstale la gem del rastrillo y debería funcionar bien:

 gem uninstall rake -v=0.9.2 gem install rake -v=0.9.2 

De lo contrario, especifique la versión ‘0.8.7’ en su Gemfile.

Si no usa Bundler:

 sudo gem install rake -v 0.8.7 sudo gem uninstall rake 

Luego elige desinstalar 0.9.0.

Si, como yo, estás atascado en el rastrillo 0.8.7 y estás utilizando Rails 3.2.x, entonces railties agrega un requisito para Rake :: DSL

Para resolver esto, al principio de su Rakefile debe agregar:

 module Rake module DSL end end 

Resolví el mismo problema con los siguientes pasos:

En Gemfile:

 gem 'rake', '0.9.2' 

Luego ejecutó esto en la consola:

 sudo bundle update rake 

Luego agregué las siguientes líneas a Rakefile:

 require 'rake/dsl_definition' include Rake::DSL 

Rails 3.1.rc1 ha sido actualizado. Para sus propios Rakefiles, puede agregar esto antes de la llamada a load_tasks.

 module ::YourApplicationName class Application include Rake::DSL end end module ::RakeFileUtils extend Rake::FileUtilsExt end 

https://gist.github.com/4cd2bbe68f98f2f0249f

ACTUALIZACIÓN: También se notó que ya se respondió aquí también: Método no definido ‘tarea’ usando Rake 0.9.0

Tuve el mismo problema y tuve que usar la gem de raske 0.8.7 en lugar de 0.9.0.

Soy un usuario de Windows XP y tuve el mismo problema.

Ingresé gem “rake”, “0.8.7” en el gemfile, y luego escribí lo siguiente desde la ventana de comandos.

 bundle update rake 

Esto solucionó mi problema.

  1. Ve a la ruta de tu proyecto
  2. Tipo bundle install --path=vendor/bundle
  3. Tipo bundle exec rake db:migrate

Para iniciar el tipo de servidor bundle exec rails s . Use bundle exec y se asegurará de que usa las gems correctas (versión requerida) para su proyecto. También le recomendaría agregar vendor/bundle a .gitignore si usa git y .gitignore alias para bundle exec . Si usa zsh puede seguir este enfoque

Igual que Branstar arriba, ¡gracias Branstar!

  • Sistema operativo: Windows Vista
  • Nivel: completamente nuevo para Ruby on Rails
  • Ya tenía instalado Ruby 1.9.2

Seguí las instrucciones en Running Rails 3 en Windows .

Todo funcionó hasta la parte “rake db: migrate” que me dio el mismo resultado que la publicación original.

Corrí:

 gem install rake 

Corrí de nuevo:

 rake db:migrate 

Luego pude iniciar el servidor de Ruby on Rails y tenía todo en su lugar.

Gracias de nuevo Branstar 🙂

Lo siento por ti (mikhailvs), es realmente frustrante. Me he estado volviendo loco por casi un día completo. Incluso desinstalé Ruby y todos sus archivos dependientes y apagué mi PC, pero todavía tengo el mismo problema.

Lo que obtuve del mensaje de error es el problema con Rake 0.9.2. Parece que no estaba completamente instalado. Así que tuve que reinstalar gem install rake -v=0.9.2

No estaba seguro de si tengo Rake -v0.9.1 instalado. Así que para asegurarme de que estoy a salvo intenté eliminar esa versión anterior con gem uninstall rake -v=0.9.1 . Pero me mostró el mensaje de error

 ERROR: While executing gem ... (Gem::InstallError) cannot uninstall, check `gem list -d rake` 

OK, entonces revisé todos los directorios de Rake en mi PC, y encontré que solo tenía Rake 0.9.2. Luego, para verificar si todo salió bien, migré con rake db:migrate . Y funcionó 🙂

Creo que no tenía Rake 0.9.1 porque instalé Ruby ( rubyinstaller-1.9.2-p180) limpiamente en mi sistema Windows 7 y todas las gems también. Mientras tanto, Rake 0.9.2 no se instaló por completo.

Desinstalar con “gem uninstall rake” funcionó para mí, tenía 2 versiones instaladas, así que bromeé con una reinstalación limpia.

“rake db: create” , para asegurarse de que existe la base de datos y luego “rake db: migrate” para sellar el trato.

Tuve el mismo problema al utilizar Rake 0.9.2.2. Resolví este problema usando bundle exec.

Para Rails 2.3, editar lib/tasks/rspec.rake como en este commit funcionó para mí:

https://github.com/dchelimsky/rspec-rails/pull/11/files

Instalar rake 0.8.7 y desinstalar 0.9.2.2

 $ gem install rake -v 0.8.7 $ gem uninstall rake -v 0.9.2.2 

Ahora usa

 $ bundle exec rake db:migrate 

Creo que esto te ayudará 😉

correr

 bundle exec rake db:migrate 

esto funciona para mi.