Ruby on RailsとRakeの問題:初期化されていない定数Rake :: DSL


189

本当にイライラする問題があります。Rakeは馬鹿げています。

問題が発生する方法は次のとおりです。

$ rails new test_app
$ rails generate scaffold new_scaffold field1:string field2:text

どちらも問題なく動作しますが、これを実行すると、

$ rake db:migrate

次のエラーが表示されます。

(in /home/mikhail/test_app)
rake aborted!
uninitialized constant Rake::DSL
/usr/lib/ruby/1.9.1/rake.rb:2482:in `const_missing'
/usr/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/tasklib.rb:8:in `<class:TaskLib>'
/usr/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/tasklib.rb:6:in `<module:Rake>'
/usr/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/tasklib.rb:3:in `<top (required)>'
/usr/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/rdoctask.rb:20:in `require'
/usr/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/rdoctask.rb:20:in `<top (required)>'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks/documentation.rake:1:in `require'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks/documentation.rake:1:in `<top (required)>'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks.rb:15:in `load'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks.rb:15:in `block in <top (required)>'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks.rb:6:in `each'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks.rb:6:in `<top (required)>'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/application.rb:214:in `require'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/application.rb:214:in `initialize_tasks'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/application.rb:139:in `load_tasks'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/application.rb:77:in `method_missing'
/home/mikhail/test_app/Rakefile:7:in `<top (required)>'
/usr/lib/ruby/1.9.1/rake.rb:2373:in `load'
/usr/lib/ruby/1.9.1/rake.rb:2373:in `raw_load_rakefile'
/usr/lib/ruby/1.9.1/rake.rb:2007:in `block in load_rakefile'
/usr/lib/ruby/1.9.1/rake.rb:2058:in `standard_exception_handling'
/usr/lib/ruby/1.9.1/rake.rb:2006:in `load_rakefile'
/usr/lib/ruby/1.9.1/rake.rb:1991:in `run'
/usr/bin/rake:31:in `<main>'

私は同様/同じエラーがないかインターネットについて調べました、そして人々はそれらを持っています。誰も問題を解決していないようです!

この問題を解決するにはどうすればよいですか?

回答:


193

以前のDHHからツイート。Rake .9.0は​​Railsと他のいくつかのものを壊します、あなたは以下をする必要があります:

gem "rake", "0.8.7"

あなたのGemfileで。


17
これでうまくいきました。bundle update rake最初にする必要がありました。次に、で確認しましたbundle show rake。0.8.7と表示されます。その後rake db:migrate
Bセブン

26
またはさらに良い:gem "rake", "!= 0.9.0"。これにより、壊れた0.9.0リリースは回避されますが、新しいリリースが公開されると、新しいバージョンに更新されます(後でこれを削除しても害はありませんが、そのままにしておくと害はありません)。
Spiralis、

6
@Spiralisバージョン0.9.2でも問題が発生しました。したがって、いくつかのバージョンではその行を追加する必要がある場合があります。
dharmatech 2011

3
この解決策私にとってはうまくいった。@dharmatechと同様に、この問題が発生し、heroku rake db:migrateこれで修正されたようです。続行する前に、これらの変更をgitに追加してコミットすることを忘れないでください;)
pruett '26 / 07/26

1
これはRailsで機能する可能性がありますsudo gem install rakerake、コマンドラインから呼び出しているバージョンが0.8.7でないことを確認する必要もあります。
Autumnsault 2012年

72

以前の回答の直後に調査を行いました(申し訳ありませんが、その前に行う必要があります)。

すべての問題はRake gem 0.9.2。で解決されています。私は次の手順に従いました。

  • インストールしましたgem install rake -v=0.9.2(0.9.1 gemがありました)
  • 0.9.1を削除しました gem uninstall rake -v=0.9.1
  • で更新 bundle update
  • その後、db:migrate警告が表示されました、WARNING: Global access to Rake DSL methods is deprecated. Please....

    Rakeファイルに以下を追加することで解決しました。

    module ::YourApplicationName  
      class Application
        include Rake::DSL
      end
    end
  • module ::RakeFileUtils extend Rake::FileUtilsExtend@databyteによって提示されたオプションを省略しました。

これは、Rake gem 0.9.2が正常に機能することを意味します。


最初の3つのステップを実行したが、警告は出されなかったので、残りは気にならなかった。提案をありがとう!
阿部ペトリロ

1
これは私に尋ねるように頼みます...なぜその機能を保持するためにレイクをハックする必要があるのですか?レイクは何をしようとしているのですか、そして私は今何を使うべきですか?
Ryanmt、2011

@ Arrumaco、Rakeファイルのディレクトリは何ですか?
Ctak 2011

それRakeFileは前にすべきであることに注意する価値がありますrequire 'rake'-私を捕まえました:)
Ciaran Archer

12
同じ問題ですが、すでにレーキがありました(0.9.2、0.8.7)。ただし、0.9.2を再インストールすると問題が解決するようです。1)gem uninstall rake -v=0.9.22)gem install rake -v=0.9.2
DK。

54

Railstutorial(demo_app)の第2章を実行して、この問題に遭遇しました。私はここにリストされている他のすべての答えを試しましたが、これを行うまでそれを機能させることができませんでした:

これを上のRakefileに入れて、 'rake'を要求してください:

require 'rake/dsl_definition'

ビアはどのようにHerokuの上で初期化されていない一定のレーキ:: DSLの問題を修正するには?

また、すべてのファイルを再コミットしてGithubおよびHerokuにプッシュしました。


0.9.2から0.8.7にダウングレードすると、私の場合など、それぞれのケースに応じて一部のgemの依存関係が壊れるので、これは最良の答えのようです。
DiegoSalazar、2011年

私にはうまくいきません。rake db:createを実行すると、「ロードするファイルがありません-rake / dsl_definition」が表示されます
KMC

25

私がする必要があるすべては使用でした:

gem install rake

私はすでにバージョン0.9.2を持っていましたが、インストールする必要がありました。


うわー、それは私のために働いた。しかし、レイクが既に存在しているはずなのに、なぜレイクをインストールしなければならないのか説明してもらえますか?
KMC

私はまだ専門家ではありませんが、私の理解は、gemをPCに「インストール」することと、gemレジストリに「インストール」することには違いがあるということです。これは、Rubyのインストールがどのgemかを知る必要があるためだと思いますあなたのPCのどこに。おそらくこれは将来的に自動化される可能性があるものか、特定のRubyディストリビューションではすでに自動化されているものです...
Branstar

19

rake gemを再インストールすると、問題なく動作するはずです。

gem uninstall rake -v=0.9.2 
gem install rake -v=0.9.2

そうでない場合は、Gemfileでバージョン「0.8.7」を指定してください。


このアプローチは、私のために働いたと私はバージョンをダウングレードする必要がないことが好ましい。..
Tarnschaf

rake -v 0.9.2.2の場合のみ、私でも機能しました
Haspemulator

10

Bundlerを使用しない場合:

sudo gem install rake -v 0.8.7
sudo gem uninstall rake

次に、0.9.0のアンインストールを選択します。


これは、バンドラーなしの私のためにそれを修正しました(レール2.3.8)。rake 0.9.2をインストールしようとしましたが、それはそれを修正しませんでした。0.8.7のインストールと0.9.2のアンインストールは、私にとって最終的に機能したものでした。
マイケルデュラント2011

8

私のように、レーキ0.8.7で立ち往生していて、Rails 3.2.xを使用している場合、railtiesはRake :: DSLの要件を追加します

これを解決するには、Rakefileの先頭に次を追加する必要があります。

module Rake
  module DSL
  end
end

7

私は次の手順で同じ問題を解決しました:

Gemfileの場合:

gem 'rake', '0.9.2'

次に、これをコンソールで実行しました。

sudo bundle update rake

次に、次の行をRakefileに追加しました。

require 'rake/dsl_definition'
include Rake::DSL


4

私は同じ問題を抱えていて、0.9.0の代わりに0.8.7のGemを使用する必要がありました。


4

私はWindows XPユーザーで、同じ問題がありました。

gemfileにgem "rake"、 "0.8.7"と入力し、コマンドウィンドウから次のように入力しました。

bundle update rake

これで問題が解決しました。


今日も私のために働いた。Win7でレールをコーディングしようとしています。
arscariosus

4
  1. プロジェクトパスに移動します
  2. タイプ bundle install --path=vendor/bundle
  3. タイプ bundle exec rake db:migrate

サーバーを起動するには、と入力しbundle exec rails sます。使用バンドルのexecを、あなたはあなたのプロジェクトのための右の宝石(必要なバージョン)を使用していることを確認してくださいます。また、のエイリアスを使用して作成vendor/bundleする.gitignore場合は、に追加することをお勧めします。使用する場合、このアプローチに従うことができますgitbundle execzsh


3

上記のBranstarと同じ-Branstarに感謝!

  • OS:Windows Vista
  • レベル:Ruby on Railsの完全に新しい
  • Ruby 1.9.2をインストール済み

WindowsでRails 3を実行するの指示に従いました

元の投稿と同じ出力が得られる「rake db:migrate」の部分まで、すべてがうまくいきました。

私が走った:

gem install rake

私はもう一度走った:

rake db:migrate

その後、Ruby on Railsサーバーを起動して、すべてを準備できました。

再びBranstarに感謝します:-)


2

私はあなたのために感じます(mikhailvs)、それは本当にイライラさせられます。私はほぼ1日中狂っています。Rubyとその依存ファイルをすべてアンインストールしてPCをシャットダウンしましたが、それでも同じ問題が発生しました。

私がエラーメッセージから得たのは、Rake 0.9.2の問題です。完全にインストールされていないようです。だから私は再インストールしなければならなかったgem install rake -v=0.9.2

rake –v0.9.1がインストールされているかどうかはわかりませんでした。安全であることを確認するために、古いバージョンをで削除しようとしましたgem uninstall rake -v=0.9.1。しかし、私にエラーメッセージが表示されます

ERROR:  While executing gem ... (Gem::InstallError)
    cannot uninstall, check `gem list -d rake`

さて、PC上のすべてのRakeディレクトリを確認したところ、Rake 0.9.2しかありませんでした。次に、すべてが正常に行われたかどうかを確認するために、を使用して移行しましたrake db:migrate。そしてそれはうまくいった:)

Ruby(Windows 7システムではrubyinstaller-1.9.2-p180)とすべてのgem をクリーンインストールしたので、Rake 0.9.1がなかったと思います。その間、Rake 0.9.2は完全にはインストールされていませんでした。


2

アンインストール「宝石のアンインストール熊手は」私の冗談は、クリーンインストールをしたので、私は2つのバージョンがインストールされていた、私のために働きました。

"rake db:create"、データベースが存在することを確認してから、"rake db:migrate"で契約を成立させます。




0

rake 0.8.7をインストールし、0.9.2.2をアンインストールします

$ gem install rake -v 0.8.7
$ gem uninstall rake -v 0.9.2.2

今使う

$ bundle exec rake db:migrate

私はこれがあなたを助けると思います;)


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.