Wie behebt man das nicht initialisierte konstante Rake :: DSL-Problem auf Heroku?


101

Ich erhalte ähnliche Fehler wie in diesen Fragen , außer dass meine bei Heroku auftreten :

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

Die Antwort in diesen Fragen scheint zu spezifizieren, gem 'rake', '0.8.7'da die Version 0.9 das Problem verursacht.

Wenn ich versuche, gem 'rake', '0.8.7'meine Gemfile zu erweitern und auf Heroku zu pushen, wird folgende Fehlermeldung angezeigt:

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'

Meine Gemfile funktioniert normalerweise gut auf Heroku. Was soll ich machen?


Haben Sie die Antwort Nr. 3 ausprobiert, die Sie gepostet haben? Was ist nach diesen Änderungen passiert?
Zabba

Antworten:


205

Fügen Sie dies in Ihr Rakefile oben ein und benötigen Sie 'Rake':

require 'rake/dsl_definition'

3
Danke dir. Das hat meine Probleme behoben und ich wusste nicht, was los war. (Verwenden des Rails-Installationsprogramms unter Windows und Bereitstellen auf Heroku als Anfänger.)
Jack V.

1
Funktioniert diese Lösung unter Windows, weil ich immer noch den gleichen Fehler erhalte - nicht initialisierte Konstante Rake :: DSL
David

2
Ich habe den Fehler beim Bereitstellen auf Heroku erhalten, der heute Rake 0.9.2 eingezogen hat. Da das ursprüngliche Problem mit 0.9.0 war, ist möglicherweise die Rake-Version nicht mehr das Problem. Das Hinzufügen der requireZeile zum Rakefile (und das erneute Festschreiben und erneute Drücken auf Github und Heroku) löste das Problem. @ David, ich verwende Windows mit dem RoR-Framework von RailInstaller 1.2.0.
Mark Berry

Nun, Sie müssen aktualisieren, um 0.9.2 zu harken, damit dies funktioniert. Viel Glück!
RubyFanatic

Ich erhalte diesen Fehler, wenn ich Rake db mache: create, "keine solche Datei zum Laden - rake / dsl_definition"
KMC

8

Jedes Mal, wenn Sie Ihre Gem-Datei ändern, müssen Sie bundle installIhre Sperrdatei (Gemfile.lock) aktualisieren. Der Fehler, den Sie beim Push erhalten, ist nicht spezifisch für das Ändern der Rake-Version.

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

Beachten Sie die Fehlermeldung, die Sie erhalten haben:

Sie haben Ihr Gemfile in der Entwicklung geändert, aber den resultierenden Snapshot (Gemfile.lock) nicht in die Versionskontrolle eingecheckt


1
Möglicherweise müssen Sie "Bundle Update Rake" ausführen, um Gemfile.lock neu zu generieren.
Jan Hettich

6

Ich habe das endlich gelöst, nachdem ich viel rumgespielt hatte. Die Kurzversion von dem, was ich getan habe und die vielen Experimente verpasst habe, war folgende:

1) Ändern Sie die Gemfile, um Rake 0.8.7 anzugeben

#in Gemfile
gem "rake", "0.8.7"

2) Nehmen Sie einen Hack heraus, den ich zuvor zu Rakefile hinzugefügt hatte, basierend auf der Stapelüberlauffrage Ruby on Rails und Rake-Problemen: nicht initialisierte Konstante Rake :: DSL :

Mein Rakefile ist nun wieder das Standard-Rakefile für meine 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) Ändern Sie Heroku, um meine App in Ruby 1.9.2 auszuführen:

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

Und jetzt scheint es in Ordnung zu sein - die geplante Cron-Aufgabe wird trotzdem ausgeführt.

EDIT: Es lief einmal gut und explodierte dann wieder, wenn ich das nächste Mal etwas drückte! Arrgh. Ich glaube, ich habe es jetzt behoben, mit dem Zusatz des delayed_jobEdelsteins, basierend auf dem Gespräch. Ich weiß nicht, wie man Aufgabenjobs erstellt: Arbeit .

Die Installation delayed_jobscheint keine großartige Lösung zu sein, aber sie hat funktioniert, und ich möchte sie vielleicht irgendwann verwenden, insbesondere bei Herokus Cron-Job einmal pro Stunde (der einfach nicht häufig genug ist - es gibt Dinge, die ich ' Ich möchte wahrscheinlich alle fünf Minuten laufen. Nachdem ich den delayed_jobEdelstein installiert hatte, musste ich das Setup dafür durchführen, sonst beschwert sich Heroku über die fehlende delayed_jobsTabelle:

#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

Ich hatte eine Rails 3.0.11-App, die Rake-Version 0.8.7 in der Gemfile spezifizierte, um das Rake :: DSL-Problem der Version 0.9.2 zu umgehen.

Nachdem ich die App auf Rails 3.2.0 (Heroku Cedar Stack) konvertiert hatte, hatte ich ein Problem mit dem Absturz des Workers (eine Rechenaufgabe). Ich habe "gem 'rake', '0.8.7'" in "gem 'rake'" geändert, wodurch die Rake-Version 0.9.2.2 gebündelt wurde. Der Worker hat mit der neuen Version aufgehört zu stürzen.


0

Ihr Problem wird dadurch verursacht, dass die Gemfile.lockDatei nicht gelöscht wird und nicht spezifisch für Heroku ist. Das Löschen Gemfile.locksollte dieses Problem beheben, führt Sie jedoch direkt zu einem anderen:

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

Leider habe ich die Lösung für dieses Problem noch nicht gefunden, da ein Downgrade von Rake auf 0.8.7 hier nicht zu funktionieren scheint. Wenn jemand anderes eine Antwort hat, würde ich es sehr schätzen.


4
Ich würde niemals empfehlen, Ihre Sperrdatei zu löschen.
Wuputah

2
Wenn Sie Gemfile.lock löschen, werden bei jeder Bereitstellung auf Heroku alle neuesten Versionen aller Gems installiert (es sei denn, Sie pinnen alle Versionen in Gemfile an).
Kliment Mamykin
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.