web-dev-qa-db-fra.com

Comment résoudre le problème constant non initialisé de Rake :: DSL sur Heroku?

Je reçois des erreurs similaires à celles inthesequestions , sauf que les miennes se produisent sur Herok :

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 réponse à ces questions semble être de préciser gem 'rake', '0.8.7' car la version 0.9 provoque le problème.

Lorsque j'essaie d'ajouter gem 'rake', '0.8.7' à mon gemfile et Push to Heroku j'obtiens cette erreur:

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'

Mon fichier gemme fonctionne normalement bien sur Heroku. Que devrais-je faire?

101
ben

Mettez ceci dans votre Rakefile ci-dessus nécessite 'rake':

require 'rake/dsl_definition'
205
Kale

Chaque fois que vous modifiez votre Gemfile, vous devez bundle install pour mettre à jour votre fichier de verrouillage (Gemfile.lock). L'erreur que vous obtenez sur Push n'est pas spécifique au changement de version de rake.

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

Notez le message d'erreur que vous avez reçu:

Vous avez modifié votre Gemfile en cours de développement mais n'avez pas vérifié l'instantané résultant (Gemfile.lock) dans le contrôle de version

8
wuputah

J'ai résolu cela, enfin, après beaucoup de déblayage. La version courte de ce que j'ai fait, sans les nombreuses expériences, était la suivante:

1) modifiez le Gemfile pour spécifier Rake 0.8.7

#in Gemfile
gem "rake", "0.8.7"

2) Supprimez un hack que j'avais précédemment ajouté à Rakefile basé sur la question Stack Overflow Ruby on Rails and Rake problems: Rake constant non initialisé) :: DSL:

Donc, mon Rakefile est maintenant redevenu le Rakefile standard pour mon application:

# 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) Modifiez Heroku pour exécuter mon application dans Ruby 1.9.2:

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

Et cela semble bien maintenant - la tâche cron planifiée est de toute façon en cours d'exécution.

EDIT: Il s'est bien déroulé , une fois, puis a explosé la prochaine fois que j'ai poussé quelque chose! Arrgh. Je pense que je l'ai corrigé maintenant, avec l'ajout du delayed_job gem, basé sur la conversation Je ne sais pas comment créer des tâches: travailler.

Installation de delayed_job ne semble pas être une excellente solution, mais cela a fonctionné, et je pourrais vouloir l'utiliser parfois, je suppose, en particulier avec le travail cron une fois par heure de Heroku (qui n'est tout simplement pas assez fréquent - il y a des choses que je je voudrai probablement courir toutes les cinq minutes). Après avoir installé le delayed_job bijou j'ai dû faire la configuration pour ça, sinon Heroku se plaint du manque delayed_jobs table:

#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
Max Williams

J'avais une application Rails 3.0.11, qui spécifiait la version 0.8.7 de rake dans le Gemfile pour contourner le problème Rake :: DSL de la version 0.9.2.

Après avoir converti l'application en Rails 3.2.0 (pile Heroku Cedar), j'ai eu un problème avec le crash du travailleur (une tâche de râteau). J'ai changé "gem 'rake", "0.8 .7 '"à" gem' rake '", qui regroupait la version 0.9.2.2 de rake. Le travailleur a cessé de planter avec la nouvelle version.

1
Wes

Votre problème est dû à la suppression de la Gemfile.lock fichier et n'est pas spécifique à Heroku. Suppression de Gemfile.lock devrait résoudre ce problème, mais vous mènera directement à un autre:

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>'

Malheureusement, je n'ai pas encore trouvé la solution à ce problème, car la rétrogradation à 0.8.7 ne semble pas fonctionner ici. Si quelqu'un d'autre a une réponse, je l'apprécierais beaucoup.

0
klaffenboeck