Come risolvere il problema costante Rake :: DSL non inizializzato su Heroku?


101

Ricevo errori simili a quelli in queste domande , tranne i miei che si verificano su 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 risposta a queste domande sembra essere quella di specificare gem 'rake', '0.8.7'perché la versione 0.9 causa il problema.

Quando provo ad aggiungere gem 'rake', '0.8.7'al mio gemfile e invio a Heroku ottengo questo errore:

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'

Il mio gemfile normalmente funziona bene su Heroku. Cosa dovrei fare?


Hai provato la risposta n. 3 che hai pubblicato? Cosa è successo dopo aver apportato queste modifiche?
Zabba

Risposte:


205

Metti questo nel tuo Rakefile sopra, richiedi 'rake':

require 'rake/dsl_definition'

3
Grazie. Questo ha risolto i miei problemi e non sapevo cosa stesse succedendo. (Utilizzo del programma di installazione di rails su Windows e distribuzione su heroku, come principiante assoluto.)
Jack V.

1
questa soluzione funziona su Windows perché ricevo ancora lo stesso errore - costante non inizializzata Rake :: DSL
David

2
Ho ricevuto l'errore durante la distribuzione su Heroku, che oggi ha inserito il rake 0.9.2. Dato che il problema originale era con la 0.9.0, forse la versione rake non è più il problema. L'aggiunta della requirelinea al rakefile (e la ripetizione e il re-push su GitHub e Heroku) ha risolto il problema. @David, sto usando Windows con il framework RoR di RailInstaller 1.2.0.
Mark Berry

Bene, dovrai aggiornare a rake 0.9.2 affinché funzioni. In bocca al lupo!
RubyFanatic

Ottengo questo errore quando eseguo rake db: create, "no such file to load - rake / dsl_definition"
KMC

8

Ogni volta che modifichi il tuo Gemfile, devi bundle installaggiornare il tuo lockfile (Gemfile.lock). L'errore che ricevi su push non è specifico per la modifica della versione di rake.

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

Prendi nota del messaggio di errore che hai ricevuto:

Hai modificato il tuo Gemfile in fase di sviluppo ma non hai controllato l'istantanea risultante (Gemfile.lock) nel controllo della versione


1
Potrebbe essere necessario eseguire "bundle update rake" per rigenerare Gemfile.lock.
Jan Hettich

6

Ho risolto questo, finalmente, dopo un sacco di confusione. La versione breve di quello che ho fatto, perdendo i molti esperimenti, è stata questa:

1) modificare il Gemfile per specificare Rake 0.8.7

#in Gemfile
gem "rake", "0.8.7"

2) Elimina un hack che avevo precedentemente aggiunto a Rakefile sulla base della domanda di Stack Overflow Ruby on Rails e problemi di Rake: costante non inizializzata Rake :: DSL :

Quindi, il mio Rakefile è ora tornato ad essere il Rakefile standard per la mia app:

# 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) Cambia Heroku per eseguire la mia app in Ruby 1.9.2:

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

E ora sembra a posto: l'attività cron pianificata è comunque in esecuzione.

EDIT: E ha gestito bene, una volta, poi fatto saltare in aria la prossima volta ho spinto qualcosa! Arrgh. Penso di averlo risolto ora, con l'aggiunta della delayed_jobgemma, in base alla conversazione Non so come costruire lavori di attività: lavoro .

L'installazione delayed_jobnon sembra un'ottima soluzione, ma ha funzionato, e potrei volerlo usare qualche volta immagino, specialmente con il cron job di Heroku una volta all'ora (che semplicemente non è abbastanza frequente - ci sono cose che io '' Probabilmente vorrò eseguire ogni cinque minuti). Dopo aver installato la delayed_jobgemma ho dovuto fare il setup per questo, altrimenti Heroku si lamenta della delayed_jobstabella mancante :

#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

1

Avevo un'app Rails 3.0.11, che specificava la versione di rake 0.8.7 nel Gemfile per aggirare il problema della versione 0.9.2 Rake :: DSL.

Dopo aver convertito l'app in Rails 3.2.0 (stack Heroku Cedar), ho riscontrato un problema con l'arresto anomalo del worker (un'attività rake). Ho cambiato "gem 'rake', '0.8.7'" in "gem 'rake'", che includeva la versione 0.9.2.2 del rake. Il lavoratore ha smesso di bloccarsi con la nuova versione.


0

Il tuo problema è causato dalla mancata eliminazione del Gemfile.lockfile e non è specifico di Heroku. L'eliminazione Gemfile.lockdovrebbe risolvere questo problema, ma ti porterà direttamente a un altro:

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

Sfortunatamente, non ho ancora trovato la soluzione per questo problema, poiché il downgrade di Rake a 0.8.7 non sembra funzionare qui. Se qualcun altro ha una risposta, la apprezzerei molto.


4
Non consiglierei mai di eliminare il tuo file di blocco.
wuputah

2
L'eliminazione di Gemfile.lock comporterà l'installazione di tutte le versioni più recenti di tutte le gemme su ciascuna distribuzione su heroku (a meno che non si aggiungano tutte le versioni a Gemfile).
Kliment Mamykin
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.