Ruby on Rails y problemas de Rake: Rake constante no inicializado :: DSL

189

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

Así es como surge el problema:

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

Ambos funcionan bien, pero cuando hago esto,

$ 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 `<class:TaskLib>'
/usr/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/tasklib.rb:6:in `<module:Rake>'
/usr/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/tasklib.rb:3:in `<top (required)>'
/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 `<top (required)>'
/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 `<top (required)>'
/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 <top (required)>'
/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 `<top (required)>'
/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 `<top (required)>'
/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 `<main>'

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

¿Cómo soluciono este problema?

HRÓÐÓLFR
fuente

Respuestas:

193

Un tweet de DHH anteriormente. El rastrillo .9.0 rompe los rieles y varias otras cosas, debes:

gem "rake", "0.8.7"

en tu Gemfile

Caley Woods
fuente
17
Esto funcionó para mí. Necesitaba hacer bundle update rakeprimero. Luego lo comprobé con bundle show rake. Debería decir 0.8.7. Entonces rake db:migrate.
B siete de
26
O aún mejor: gem "rake", "!= 0.9.0". Esto evita la versión 0.9.0 rota, pero se actualizará a una más nueva una vez que se publique una versión más reciente (eliminar esto más adelante no dañará, pero mantenerlo tampoco debería dañar).
Spiralis
66
@Spiralis También me encontré con el problema con la versión 0.9.2. Por lo tanto, es posible que deba agregar esa línea para algunas versiones.
dharmatech
3
Esta solución funcionó para mí. Al igual que @dharmatech, aparece este problema heroku rake db:migratey esto parece solucionarlo. recuerde agregar y confirmar estos cambios en git antes de continuar;)
pruebe el
1
Esto puede funcionar para Rails, pero también tuve que hacer sudo gem install rakepara asegurarme de que la rakeversión que estaba llamando desde la línea de comandos no era 0.8.7.
Autumnsault
72

Investigué un poco 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(tenía la gema 0.9.1)
  • eliminado el 0.9.1 con gem uninstall rake -v=0.9.1
  • actualizado con bundle update
  • entonces el db:migratemostró una advertencia,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í la module ::RakeFileUtils extend Rake::FileUtilsExtendopción sugerida por @databyte.

¡Significa que la gema Rake 0.9.2 funciona bien!

Arrumaco
fuente
Seguí los primeros tres pasos y no recibí ninguna advertencia, así que no me molesté con el resto, ¡Gracias por la sugerencia!
Abe Petrillo
1
Esto me pide que pregunte ... ¿Por qué debería hackear a Rake para conservar esa función? ¿Qué intenta hacer Rake y qué debo usar ahora?
Ryanmt
@Arrumaco, ¿Cuál es el directorio para el archivo Rake?
Ctak
Vale la pena señalar que la adición a la RakeFiledebería ser antes require 'rake'- me sorprendió :)
Ciaran Archer
12
mismo problema, pero ya tenía rastrillo (0.9.2, 0.8.7). Sin embargo, la reinstalación de 0.9.2 parece solucionar el problema: 1) gem uninstall rake -v=0.9.22)gem install rake -v=0.9.2
DK.
54

Revisando el Capítulo 2 de Railstutorial (demo_app) y me encontré con este problema. Intenté todas las otras respuestas enumeradas aquí, pero no pude hacerlo funcionar hasta que hice esto:

Ponga esto en su Rakefile anterior requiere 'rake':

require 'rake/dsl_definition'

a través de cómo solucionar el problema constante Rake :: DSL sin inicializar en Heroku?

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

djblue2009
fuente
Esta parece ser la mejor respuesta ya que la degradación de 0.9.2 a 0.8.7 rompería algunas dependencias de gemas dependiendo de cada caso, como la mía :) ¡Gracias!
DiegoSalazar
A mi no me funciona. Obtengo "no hay tal archivo para cargar - rake / dsl_definition" cuando hago rake db: create
KMC
25

Todo lo que necesitaba hacer era usar:

gem install rake

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

Branstar
fuente
wow funcionó para mí Pero, ¿podría explicar por qué tengo que instalar el rastrillo mientras el rastrillo ya debería estar allí?
KMC
Todavía no soy un experto, pero entiendo que hay una diferencia entre 'instalar' gemas en su PC e 'instalarlas' en un registro de gemas: sospecho que esto se debe a que la instalación de Ruby necesita saber qué gemas son donde en tu PC. Quizás esto es algo que podría automatizarse en el futuro, o ya está automatizado en ciertas distribuciones de Ruby ...
Branstar
19

Vuelva a instalar la gema de rastrillo y debería funcionar bien:

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

Si no, especifique la versión '0.8.7' en su Gemfile.

hohner
fuente
este enfoque funcionó para mí y preferí no tener que degradar la versión ..
Tarnschaf
También funcionó para mí, solo para rake -v 0.9.2.2
Haspemulator
10

Si no usa Bundler:

sudo gem install rake -v 0.8.7
sudo gem uninstall rake

Luego elija desinstalar 0.9.0.

Travis Reeder
fuente
esto me lo arregló sin bundler (rails 2.3.8). Había intentado instalar el rastrillo 0.9.2 pero eso no lo solucionó. Instalar 0.8.7 y desinstalar 0.9.2 fue lo que finalmente funcionó para mí.
Michael Durrant
8

Si, como yo, estás atrapado 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, en la parte superior de tu Rakefile debes agregar:

module Rake
  module DSL
  end
end
Jonathon Horsman
fuente
7

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 agregó las siguientes líneas a Rakefile:

require 'rake/dsl_definition'
include Rake::DSL
Gaurav Gupta
fuente
4

Tuve el mismo problema y tuve que usar la gema rake 0.8.7 en lugar de 0.9.0.

Pablo
fuente
4

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

Ingresé la gema "rastrillo", "0.8.7" en el archivo de gemas, y luego escribí lo siguiente desde la ventana de comandos.

bundle update rake

Esto solucionó mi problema.

Señor principiante
fuente
funcionó para mí también, a partir de hoy. solo trato de codificar rieles en Win7.
arscariosus
4
  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 servidor escriba bundle exec rails s. Use bundle exec y se asegurará de usar las gemas correctas (versión requerida) para su proyecto. También le recomiendo que añadir vendor/bundleque .gitignoresi se utiliza gity hacer alias para bundle exec. Si usas zshpuedes seguir este enfoque

ka8725
fuente
3

Igual que Branstar arriba, ¡gracias Branstar!

  • SO: Windows Vista
  • Nivel: completamente nuevo en 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 Ruby on Rails y tuve todo en su lugar.

Gracias de nuevo Branstar :-)

zimini
fuente
2

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 aún 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. Entonces tuve que reinstalargem install rake -v=0.9.2

No estaba seguro de tener el rastrillo –v0.9.1 instalado. Entonces, para asegurarme de que estoy seguro, traté de 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 descubrí que solo tenía Rake 0.9.2. Luego, para comprobar si todo salió bien, migré con rake db:migrate. Y funcionó :)

Creo que no tenía Rake 0.9.1 porque instalé Ruby de forma limpia ( rubyinstaller-1.9.2-p180 - en mi sistema Windows 7) y todas las gemas también. Mientras tanto, Rake 0.9.2 no estaba completamente instalado.

egyamado
fuente
2

La desinstalación 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 la base de datos existe y luego "rake db: migrate" para cerrar el trato.

Christopher
fuente
2

Tuve el mismo problema al usar Rake 0.9.2.2. Resolví este problema usando el paquete exec.

Sean Kibler
fuente
0

Instale rake 0.8.7 y desinstale 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á ;)

Anuj
fuente
0

correr

bundle exec rake db:migrate

esto funciona para mi.

JakeGould
fuente