2011-05-30 10 views
100

estoy recibiendo errores similares a los inthesequestions, con excepción de las minas se están produciendo en Heroku:¿Cómo solucionar el problema de Rake :: DSL constante no inicializada 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 de estas preguntas parece ser para especificar gem 'rake', '0.8.7' porque la versión 0.9 provoca el problema.

Cuando intento agregar gem 'rake', '0.8.7' a mi Gemfile y empujar a Heroku consigo 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. ¿Que debería hacer?

+0

¿Usted intentó el [# 3 respuesta] (http://stackoverflow.com/questions/5287121/undefined-method-task-using-rake-0-9-0/5290331#5290331) informados? ¿Qué pasó después de hacer esos cambios? – Zabba

Respuesta

205

poner esto en su Rakefile por encima de requieren 'rastrillo':

require 'rake/dsl_definition' 
+3

¡Maldición, eso es mucho más simple que mi solución! :/ –

+3

Gracias. Eso solucionó mis problemas y no sabía lo que estaba pasando. (Usando el instalador de carriles en las ventanas y el despliegue de Heroku, como un principiante.) –

+1

hace este trabajo solución en ventanas porque yo todavía estoy recibiendo el mismo error - Rastrillo constante sin inicializar :: DSL – David

0

Su problema se debe a que no se eliminó el archivo Gemfile.lock y no es específico de Heroku. Eliminación Gemfile.lock debería solucionar este problema, pero le llevará directamente a otro:

To [email protected]:tailored-landing-pages.git 
* [new branch]  master -> master 
[email protected]:~/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>' 

Por desgracia, no he encontrado la solución para ese problema, sin embargo, ya no parece degradar Rake a 0.8.7 para trabajar aquí. Si alguien más tiene una respuesta, la apreciaría muchísimo.

+4

Nunca recomendaría eliminar su archivo de bloqueo. Al eliminar la – wuputah

+2

Gemfile.lock dará lugar a la instalación de todas las últimas versiones de todas las gemas en cada implementar en heroku (a menos que usted fija en todas las versiones Gemfile). –

6

Lo resolví, finalmente, después de un montón de tonterías. La versión corta de lo que hice, perdiendo los muchos experimentos, fue la siguiente:

1) cambiar el Gemfile para especificar Rake 0.8.7

#in Gemfile 
gem "rake", "0.8.7" 

2) Sacar un truco que había añadido previamente a Rakefile basado en pila   pregunta desbordamiento Ruby on Rails and Rake problems: uninitialized constant Rake::DSL:

lo tanto, mi Rakefile es ahora de nuevo a ser el estándar Rakefile 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) Cambio 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 bien ahora - la tarea programada se ejecuta cron de todos modos.

EDIT: hizo corre 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 gema delayed_job, basada en la conversación Don't know how to build task jobs:work.

La instalación de delayed_job no parece una gran solución, pero HA FUNCIONADO, y podría querer usarlo alguna vez, 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 que tenía que hacer la configuración para que, de lo contrario Heroku se queja de la delayed_jobs tabla faltante:

#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 
8

Cada vez que cambie su Gemfile, tiene que bundle install para actualizar el fichero de bloqueo (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 

Nota el mensaje de error que recibió:

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

+1

Es posible que tenga que ejecutar "actualización rastrillo paquete" para regenerar Gemfile.lock. –

1

tuve una aplicación Rails 3.0.11, que especifica el rastrillo versión 0.8.7 en el Gemfile para moverse por la versión 0.9.2 Rake: : Problema de DSL

Después Convertí la aplicación a Rails 3.2.0 (pila Cedar Heroku), estaba teniendo un problema con el trabajador (una tarea rake) estrellarse. Cambié "rastrillo de gema", "0.8.7" a "rastrillo de gema", que incluía la versión de rastrillo 0.9.2.2. El trabajador dejó de bloquearse con la nueva versión.

Cuestiones relacionadas