初期化されていない定数Rake :: DSLの問題をHerokuで修正する方法は?


101

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

これらの質問の答えはgem 'rake', '0.8.7'、0.9バージョンが問題を引き起こすため、特定することであるようです。

gem 'rake', '0.8.7'gemfile に追加してHerokuにプッシュしようとすると、次のエラーが発生します。

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'

私のgemfileは通常Herokuで正常に動作します。私は何をすべきか?


投稿した#3の回答を試しましたか?これらの変更を行った後に何が起こりましたか?
Zabba

回答:


205

これを上記の Rakefileに入れ、require 'rake'を実行します。

require 'rake/dsl_definition'

3
ありがとうございました。これで問題が解決し、何が起こっているのかわかりませんでした。(WindowsでRailsインストーラーを使用し、完全な初心者としてherokuにデプロイします。)
ジャックV.

1
私はまだ同じエラーが発生するため、このソリューションはWindowsで機能しますか-初期化されていない定数Rake :: DSL
David

2
Herokuへのデプロイ中にエラーが発生しました。Herokuは今日、rake 0.9.2で導入されました。元々の問題は0.9.0にあったため、おそらくRakeバージョンは問題ではなくなっています。このrequire行をrakefileに追加すると(そしてgithubとHerokuに再コミットして再度プッシュすると)、問題は解決しました。@David、私はRailInstaller 1.2.0のRoRフレームワークでWindowsを使用しています。
Mark Berry

これを機能させるには、rake 0.9.2に更新する必要があります。幸運を!
RubyFanatic

rake db:createを実行すると、「ロードするファイルがありません-rake / dsl_definition」のときにこのエラーが発生します
KMC

8

Gemfileを変更するたびに、bundle installロックファイル(Gemfile.lock)を更新する必要があります。プッシュで発生するエラーは、rakeのバージョンの変更に固有のものではありません。

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

受け取ったエラーメッセージに注意してください。

開発中にGemfileを変更しましたが、結果のスナップショット(Gemfile.lock)をバージョン管理にチェックしませんでした


1
Gemfile.lockを再生成するには、「バンドル更新rake」を実行する必要がある場合があります。
Jan Hettich、2011年

6

私はこれを解決しました。ついに、いじくり回しました。私がやったことの短いバージョンは、多くの実験を省いて、これでした:

1)Gemfileを変更してRake 0.8.7を指定します

#in Gemfile
gem "rake", "0.8.7"

2)Stack Overflowの質問Ruby on RailsとRakeの問題に基づいて以前にRakefileに追加したハックを取り除きます:初期化されていない定数Rake :: DSL

だから、私のRakefileは今や私のアプリの標準Rakefileに戻っています:

# 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)Ruby 1.9.2でアプリを実行するようにHerokuを変更します。

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

そして、今では問題ないようです-スケジュールされたcronタスクはとにかく実行されています。

編集:それ一度うまくいきました、そして次に私が何かを押したときにもう一度吹き飛ばしました!ああ。今、私はそれを修正したと思いますdelayed_job。gemを追加し、タスクjob:workを構築する方法がわからないという会話に基づいています。

インストールdelayed_jobは素晴らしい解決策のようには見えませんが、うまくいったので、いつか私はおそらくそれを使用したいと思うかもしれません。おそらく5分ごとに実行する必要があります)。delayed_jobgem をインストールした後、それを設定する必要がありました。そうしないと、Herokuが不足している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

1

Rails 3.0.11アプリがあり、バージョン0.9.2 Rake :: DSLの問題を回避するためにGemfileでrakeバージョン0.8.7が指定されていました。

アプリをRails 3.2.0(Heroku Cedarスタック)に変換した後、ワーカー(rakeタスク)のクラッシュで問題が発生しました。「gem 'rake'、 '0.8.7'」を「gem 'rake'」に変更しました。これには、rakeバージョン0.9.2.2がバンドルされています。ワーカーは新しいバージョンでクラッシュしなくなりました。


0

問題の原因はGemfile.lockファイルを削除しないことであり、Herokuに固有のものではありません。削除Gemfile.lockするとこの問題は修正されますが、別の問題に直接移動します。

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

残念ながら、Rakeを0.8.7にダウングレードしてもここでは機能しないようなので、その問題の解決策はまだ見つかりません。他の誰かが答えを持っているなら、私はそれを非常に感謝します。


4
ロックファイルを削除することはお勧めしません。
ウプタ

2
Gemfile.lockを削除すると、herokuへの各デプロイですべてのgemの最新バージョンがすべてインストールされます(Gemfileですべてのバージョンを固定しない限り)。
Kliment Mamykin
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.