web-dev-qa-db-ja.com

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

inこれらquestions に似たエラーが表示されますが、私の場合は 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>'

これらの質問の答えは、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 [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'

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

101
ben

これをあなたのRakefileに入れてください上記 require 'rake':

require 'rake/dsl_definition'
205
Kale

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

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

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

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

8
wuputah

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

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

#in Gemfile
gem "rake", "0.8.7"

2)Stack Overflowの質問Ruby on Rails and Rake issues:uninitialized constant Rake)に基づいて以前にRakefileに追加したハックを取り出します:: 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)Herokuを変更して、アプリをRuby 1.9.2:

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

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

編集:それはdid、一度正常に実行し、次に何かをプッシュしたときに再び爆発した!ああ。会話に基づいてdelayed_job gemを追加して修正したと思いますタスクjob:workの構築方法がわかりません

delayed_jobをインストールすることは素晴らしい解決策ではないように見えますが、うまく機能しました。特に、Herokuの1時間に1回のcronジョブ(これは十分ではありません-おそらく5分ごとに実行したいことがあります)。 delayed_job gemをインストールした後、セットアップを行う必要がありました。そうしないと、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
6
Max Williams

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

アプリをRails 3.2.0(Heroku Cedarスタック)に変換した後、ワーカー(レーキタスク)がクラッシュする問題がありました。 "gem 'rake'、 '0.8 .7 '"から" gem' rake '"にrakeバージョン0.9.2.2がバンドルされました。ワーカーは新しいバージョンでクラッシュを停止しました。

1
Wes

問題はGemfile.lockファイルを削除していないことが原因であり、Herokuに固有のものではありません。 Gemfile.lockを削除するとこの問題は解決するはずですが、別の問題に直行することになります。

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

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

0
klaffenboeck