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


Estoy recibiendo errores similares a los en estos preguntas, a excepción de la mina se están produciendo en Heroku:

2011-05-30T09:03:29+00:00 heroku[worker.1]: Starting process with command: `rake jobs:work`
2011-05-30T09:03:30+00:00 app[worker.1]: (in /app)
2011-05-30T09:03:30+00:00 heroku[worker.1]: State changed from starting to up
2011-05-30T09:03:33+00:00 app[worker.1]: rake aborted!
2011-05-30T09:03:33+00:00 app[worker.1]: uninitialized constant Rake::DSL
2011-05-30T09:03:33+00:00 app[worker.1]: /app/.bundle/gems/ruby/1.9.1/gems/rake-0.9.0/lib/rake/tasklib.rb:8:in `<class:TaskLib>'

La respuesta en esas preguntas parece ser especificar gem 'rake', '0.8.7' porque la versión 0.9 causa el problema.

Cuando intento agregar gem 'rake', '0.8.7' a mi gemfile y empujar a Heroku, obtengo este error:

Unresolved dependencies detected; Installing...
You have modified your Gemfile in development but did not check
the resulting snapshot (Gemfile.lock) into version control

You have added to the Gemfile:
* rake (= 0.8.7)
FAILED: http://devcenter.heroku.com/articles/bundler
! Heroku push rejected, failed to install gems via Bundler
error: hooks/pre-receive exited with error code 1
To [email protected]:my_app.git
! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to '[email protected]:my_app.git'

Mi gemfile normalmente funciona bien en Heroku. ¿Qué debo hacer?

Author: Community, 2011-05-31

5 answers

Pon esto en tu Rakefile arriba requiere 'rake':

require 'rake/dsl_definition'
 205
Author: Kale,
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-06-07 09:31:24

Cada vez que cambie su Gemfile, necesita bundle install para actualizar su lockfile (Gemfile.bloqueo). El error que está recibiendo en push no es específico para cambiar la versión de rake.

bundle install
git commit -a -m "update lockfile"
git push heroku master

Tenga en cuenta el mensaje de error que recibió:

Ha modificado su Gemfile en desarrollo pero no ha comprobado la instantánea resultante (Gemfile.lock) en control de versiones

 8
Author: wuputah,
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-06-11 22:53:15

Resolví esto, finalmente, después de mucho tonteo. La versión corta de lo que hice, perdiéndome los muchos experimentos, fue esta:

1) cambie el Gemfile para especificar Rake 0.8.7

#in Gemfile
gem "rake", "0.8.7"

2) Sacar un hack que había añadido previamente a Rakefile basado en la pregunta de desbordamiento de pila Problemas de Ruby on Rails y Rake: Rake constante no iniciado:: DSL:

Así que, mi Rakefile ha vuelto a ser el Rakefile estándar para mi aplicación:

# Add your own tasks in files placed in lib/tasks ending in .rake,
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
require File.expand_path('../config/application', __FILE__)
require 'rake'

MyApp::Application.load_tasks

3) Cambiar Heroku para ejecutar mi aplicación en Ruby 1.9.2:

heroku stack:migrate bamboo-mri-1.9.2 --app myapp
git push heroku master

Y parece estar bien ahora - la tarea cron programada se está ejecutando de todos modos.

EDIT: It did run fine, once, then blown up again next time I pushed something! Arrgh. Creo que lo arreglé ahora, con la adición de la gema delayed_job, basada en la conversación No sé cómo crear trabajos de tareas: trabajo.

Instalar delayed_job no parece una gran solución, pero HA funcionado, y es posible que desee usarlo en algún momento, supongo, especialmente con el trabajo cron de Heroku una vez por hora (que simplemente no es lo suficientemente frecuente, hay cosas que probablemente quiera ejecutar cada cinco minutos). Después de instalar la gema delayed_job tuve que hacer la configuración para ella, de lo contrario Heroku se queja de la falta de delayed_jobs tabla:

#add to gemfile
gem 'delayed_job'

#at command line
bundle install
rails g delayed_job
rake db:migrate
git add -A
git commit -a -m "added delayed_job gem"
git push
heroku rake db:migrate --app myapp
heroku restart --app myapp
 6
Author: Max Williams,
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:24:08

Tenía una aplicación Rails 3.0.11, que especificaba la versión 0.8.7 de rake en el Gemfile para evitar el problema de la versión 0.9.2 Rake::DSL.

Después de convertir la aplicación a Rails 3.2.0 (Heroku Cedar stack), tuve un problema con el bloqueo del worker (una tarea de rake). Cambié " gem 'rake', '0.8.7'" a "gem ' rake'", que incluía la versión de rake 0.9.2.2. El trabajador dejó de estrellarse con la nueva versión.

 1
Author: Wes,
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-01-22 21:02:00

Su problema es causado por no eliminar el archivo Gemfile.lock y no es específico de Heroku. Eliminar Gemfile.lock debería solucionar este problema, pero te llevará directamente a otro:

To [email protected]:tailored-landing-pages.git
 * [new branch]      master -> master
manfred@painstation2:~/Desktop/projects/ror/ta/tlp307$ heroku rake db:migrate
rake aborted!
ninitialized constant Rake::DSL
/app/Rakefile:13:in `<class:Application>'
/app/Rakefile:12:in `<module:Tlp307>'
/app/Rakefile:11:in `<top (required)>'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2373:in `load'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2373:in `raw_load_rakefile'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2007:in `block in load_rakefile'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2058:in `standard_exception_handling'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2006:in `load_rakefile'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:1991:in `run'
/usr/ruby1.9.2/bin/rake:31:in `<main>'

Desafortunadamente, todavía no he encontrado la solución para ese problema, ya que bajar el Rake a 0.8.7 no parece funcionar aquí. Si alguien más tiene una respuesta, se lo agradecería mucho.

 0
Author: klaffenboeck,
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-31 14:00:41