Problemas de Ruby on Rails y Rake: Rake constante no iniciado:: DSL


Estoy teniendo un problema realmente frustrante: Rake es ser tonto.

Así es como surge el problema:

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

Ambos funcionan bien, pero luego cuando hago esto,

$ rake db:migrate

Obtengo 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/mismos, y la gente los ha tenido. ¡Simplemente nadie parece resolver el problema!

¿Cómo puedo solucionar este problema?

Author: Andrew Marshall, 2011-05-22

19 answers

Un tweet de DHH anterior. Rastrillo .9.0 rompe rieles y varias otras cosas, necesitas:

gem "rake", "0.8.7"

En tu Gemfile.

 193
Author: Caley Woods,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-05-22 04:11:11

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 (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:migrate mostró 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
    
  • He omitido la opción module ::RakeFileUtils extend Rake::FileUtilsExtend sugerida por @databyte.

¡Significa que la gema Rake 0.9.2 funciona bien!

 72
Author: Arrumaco,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-30 14:31:44

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

Pon esto en tu Rakefile anterior require 'rake':

require 'rake/dsl_definition'

Vía ¿Cómo solucionar el problema de la constante no inicializada Rake::DSL en Heroku?

También me comprometí de nuevo y empujé todos los archivos a Github y Heroku.

 54
Author: djblue2009,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:46:12

Todo lo que necesitaba hacer era usar:

gem install rake

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

 25
Author: Branstar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-04 23:14:00

Vuelva a instalar la gema rake 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.

 19
Author: hohner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-11 19:38:58

Si no se usa Bundler:

sudo gem install rake -v 0.8.7
sudo gem uninstall rake

A continuación, elija desinstalar 0.9.0.

 10
Author: Travis Reeder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-05-23 08:17:31

Si como yo estás atascado en rake 0.8.7, y estás usando Rails 3.2.x luego railties agrega un requisito para Rake:: DSL

Para resolver esto, a la parte superior de su Rakefile debe agregar:

module Rake
  module DSL
  end
end
 8
Author: Jonathon Horsman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-18 17:28:34

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
 7
Author: Gaurav Gupta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-08-10 05:13:37

Carriles 3.1.rc1 ha sido actualizado. Para tus propios Rakefiles, puedes 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 noté que ya está contestada aquí también: Undefined method 'task' usando Rake 0.9.0

 6
Author: databyte,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:25:02

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

 4
Author: Paul,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-05-22 04:04:15

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.

 4
Author: Mr. Beginner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-30 14:37:09
  1. Vaya a la ruta de su 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 estará seguro de usar las gemas correctas (versión requerida) para su proyecto. También te recomendaría agregar vendor/bundle a .gitignore si usas git y haces alias para bundle exec. Si utiliza zsh puede seguir este enfoque

 4
Author: ka8725,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-02-15 14:11:20

Igual que Branstar arriba - gracias Branstar!

  • OS: Windows Vista
  • Nivel: Completamente nuevo en Ruby on Rails
  • Ya tenía Ruby 1.9.2 instalado

Seguí las instrucciones en Ejecución de Rails 3 en Windows.

Todo funcionó hasta la parte "rake db:migrate" que me dio la misma salida que el post original.

Corrí:

gem install rake

Corrí de nuevo:

rake db:migrate

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

Gracias de nuevo Branstar: -)

 3
Author: zimini,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-30 14:39:28

Lo siento por ti (mikhailvs), es realmente frustrante. He estado volviéndome 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 si tenía rake –v0.9.1 instalado. Así que para asegurarse de que estoy seguro traté de eliminar esa versión antigua con gem uninstall rake -v=0.9.1. Pero es me mostró el mensaje de error

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

OK, así que revisé todos los directorios de Rake en mi PC, y encontré 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 tiene Rake 0.9.1 porque me limpia-instalado Ruby (rubyinstaller-1.9.2-p180 - en mi sistema Windows 7) y todas las gemas así. Mientras tanto, Rake 0.9.2 no estaba completamente instalado.

 2
Author: egyamado,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-30 14:42:32

Desinstalar con "gem uninstall rake" funcionó para mí, tenía 2 versiones instaladas, así que hice una reinstalación limpia.

"rake db: crear" , para asegurarse de que la base de datos existe y luego "rake db:migrate" para sellar el trato.

 2
Author: Christopher,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-25 22:50:51

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

 2
Author: Sean Kibler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-07-04 14:53:07

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

 0
Author: guapolo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-24 05:58:24

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 use

$ bundle exec rake db:migrate

Creo que esto te ayudará ;)

 0
Author: SpunkyLive,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-02-25 09:04:03

Ejecutar

bundle exec rake db:migrate

Funciona para mí.

 0
Author: JakeGould,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-19 16:20:43