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

Recibo errores similares a los de estas preguntas , excepto que los míos están ocurriendo 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 `' 

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

Cuando trato de agregar gem 'rake', '0.8.7' a mi gemfile y presiono 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 git@heroku.com:my_app.git ! [remote rejected] master -> master (pre-receive hook declined) error: failed to push some refs to 'git@heroku.com:my_app.git' 

Mi gemfile normalmente funciona bien en Heroku. ¿Que debería hacer?

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

 require 'rake/dsl_definition' 

Cada vez que cambie su Gemfile, debe bundle install para actualizar su archivo de locking (Gemfile.lock). El error que está recibiendo al presionar no es específico para cambiar la versión del 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 verificado la instantánea resultante (Gemfile.lock) en el control de versiones

Lo resolví, finalmente, después de mucho alboroto. La versión corta de lo que hice, perdiendo muchos experimentos, fue esta:

1) cambie el Gemfile para especificar Rake 0.8.7

 #in Gemfile gem "rake", "0.8.7" 

2) Extraiga un truco que había agregado previamente a Rakefile basado en la pregunta de desbordamiento de stack Ruby on Rails and Rake: constante no inicializada Rake :: DSL :

Por lo tanto, mi Rakefile ahora 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 progtwigda se está ejecutando de todos modos.

EDITAR: ¡Funcionó bien, una vez, luego voló de nuevo la próxima vez que empujé algo! Arrgh. Creo que lo arreglé ahora, con la adición de la gem 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 podría querer 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 correr cada cinco minutos). Después de instalar la joya de la delayed_job , tuve que hacer la configuración, de lo contrario, Heroku se queja de la tabla de delayed_jobs la delayed_jobs :

 #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 

Tenía una aplicación Rails 3.0.11, que especificaba la versión de rake 0.8.7 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 (stack Heroku Cedar), estaba teniendo un problema con el trabajador (una tarea de rake) que se colgaba. Cambié “rastrillo de gem”, “0.8.7” a “rastrillo de gem”, que incluía la versión de rastrillo 0.9.2.2. El trabajador dejó de bloquearse con la nueva versión.

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 git@heroku.com: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 `' /app/Rakefile:12:in `' /app/Rakefile:11:in `' /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 `
'

Desafortunadamente, todavía no he encontrado la solución para ese problema, ya que la degradación de Rake a 0.8.7 no parece funcionar aquí. Si alguien más tiene una respuesta, la apreciaría muchísimo.