2011-07-18 5 views
6

rake db:migrateHerokuにしようとすると。次のエラーが表示されます。レイクは中止!初期化されていない定数Rake :: DSL on Heroku

rake aborted! 
uninitialized constant Rake::DSL 

私が集めたものは、Rake 0.9.2のバグです。私が "gem list"をローカルに実行すると、Rake(0.8.7)のみがインストールされているように見えます。

"gem 'rake'、 '0.8.7'"をgemファイルに追加してバンドルをインストールしようとしましたが、次のエラーが表示されます。

You have requested: 
rake = 0.8.7 

The bundle currently has rake locked at 0.9.2. 
Try running `bundle update rake` 

私は実行bundle update rakeを行う場合は、それが戻って0.9.2に戻り、私が始めたところ私は戻ってきました。

私はここで何かが分かりませんか?

答えて

10

適切な依存関係を確実に取得するには、bundle execを使用してコマンドを実行する必要があります。だから、実行:あなたはまだ問題が解決しない場合は

bundle exec rake db:migrate 

より詳細なポストについてイェフダカッツのブログ記事にhttp://yehudakatz.com/2011/05/30/gem-versioning-and-bundler-doing-it-right/

を参照してください、彼らは追加することで解決同じ問題How to fix the uninitialized constant Rake::DSL problem on Heroku?を持ついくつかの他の人々があるように見えます彼らのRakefileに以下:

require 'rake/dsl_definition' 
require 'rake' 
1

私はこのことについてブログ記事を持っている、You have already activated Rake 0.9.2。これを行うには2つの方法があります。

$ gem listとあなたの現在のレーキのバージョンをチェックアウト:

のみレーキの古いバージョンを使用しています。 0.8.7以外のRakeのバージョンを確認して削除してください。 gem uninstall rake -v=0.9.1または削除する必要があるバージョンを使用して宝石を削除することができます。

またはちょうどあなたのRakeファイルに1つのライナーを追加します。あなたはあなたのRailsのアプリRakefileにこの行require 'rake/dsl_definition'を追加することが容易であるレーキの古いバージョンを使用する必要がない限り

require File.expand_path('../config/application', __FILE__) 
require 'rake/dsl_definition' 
require 'rake' 
0

これを使用して、宝石を削除せずにこの問題を早期に解決しました。このメソッドは、あなたのアプリに0.9+よりも安定したRake 0.8.7を使用させます。使用するRakeのバージョンを指定した後にbundle update rakeコマンドを実行する必要があります。gemfile.lockファイルがgemファイルと同期しています(このステップをスキップすると、Herokuはコードをプッシュできません!あなたの宝石のファイルで)

使用するレーキのバージョンを指定します。

"rake", "0.8.7" 

は、その後の操作を行います。

bundle update rake 

を、これはまだやるそして、あなたのために働いていない場合:

sudo gem uninstall rake 
0

rich's answer(宝石を削除せずにこの問題を解決します)と同じですが、手順1.を修正して、そして、いくつかの追加手順:宝石ファイルで

  1. 指定:

    gem 'rake', '0.8.7' 
    
  2. bundle install(バンドラーのドキュメントは、常にあなたの宝石のファイルを変更した後、 'バンドルがインストール' と言う)

  3. git commit -am "Fixed heroku rake problem by specifying rake 0.8.7 in Gemfile"

  4. git push heroku

  5. heroku rake db:migrate

私は "Herokuのすくいデシベル:移行" を行うときに、私はこのエラーを得、ステップ3と4

3

なく、同じエラーを得ました。 /app

rake aborted! 
uninitialized constant Rake::DSL 
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2482:in `const_missing' 
.... 
... 
.... 
.. 
etc... 

私はRakeFileで

require 'rake/dsl_definition' 

を追加することによって、それを修正して、この1つは私の問題を解決し

bundle update rake 
git add . 
git commit -m "Change RakeFile" 
git push heroku 
heroku rake db:migrate 

で入力しました。私はgem 'rake', '0.8.7'を私の宝石ファイル に加えていませんでした。私の宝石リストにはレーキ(0.9.2、0.8.7)が表示されています。

+0

ありがとうmamonlukでも、私も同じ問題が私のために働いていた:) –