web-dev-qa-db-ja.com

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

私は本当にイライラする問題を抱えています: 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>'

私はインターネットで同様の/同じエラーを探しましたが、人々はそれを経験しました。誰も問題を解決していないようです!

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

190
HRÓÐÓLFR

A DHHからのツイート 以前。 Rake .9.0は​​Railsおよびその他のいくつかのことを中断します。

gem "rake", "0.8.7"

gemfileで。

193
Caley Woods

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

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

  • gem install rake -v=0.9.2をインストールしました(0.9.1 gemがありました)
  • gem uninstall rake -v=0.9.1で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
    
  • @databyteによって推測されるmodule ::RakeFileUtils extend Rake::FileUtilsExtendオプションを省略しました。

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

72
Arrumaco

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

これを上記のRakefileに入れて 'rake'を要求します:

require 'rake/dsl_definition'

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

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

54
djblue2009

私がする必要があるのは、使用することだけでした:

gem install rake

バージョン0.9.2が既にあり、インストールするだけで済みました。

25
Branstar

Rake gemを再インストールすると、should正常に動作します。

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

そうでない場合は、Gemfileでバージョン「0.8.7」を指定します。

19
hohner

Bundlerを使用しない場合:

Sudo gem install rake -v 0.8.7
Sudo gem uninstall rake

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

10
Travis Reeder

私のように、rake 0.8.7にこだわっており、Rails 3.2.xを使用している場合、railtiesはRake :: DSLの要件を追加します

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

module Rake
  module DSL
  end
end
8

次の手順で同じ問題を解決しました。

Gemfileで:

gem 'rake', '0.9.2'

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

Sudo bundle update rake

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

require 'rake/dsl_definition'
include Rake::DSL
7
Gaurav Gupta

Rails 3.1.rc1が更新されました。独自のRakefileの場合、load_tasksを呼び出す前にこれを追加できます。

module ::YourApplicationName
  class Application
    include Rake::DSL
  end
end

module ::RakeFileUtils
  extend Rake::FileUtilsExt
end

https://Gist.github.com/4cd2bbe68f98f2f0249f

更新:また、ここでも既に回答されていることに注意してください: Rake 0.9.0を使用した未定義のメソッド 'task'

6
databyte

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

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

bundle update rake

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

4
Mr. Beginner

同じ問題があり、0.9.0ではなくrake 0.8.7 gemを使用する必要がありました。

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

サーバーを起動するには、bundle exec Rails sと入力します。 bundle execを使用すると、プロジェクトに適切なgem(必要なバージョン)を確実に使用できます。また、gitを使用してvendor/bundleのエイリアスを作成する場合は、.gitignorebundle execに追加することをお勧めします。 zshを使用する場合、 このアプローチ に従うことができます

4
ka8725

上記のブランスターと同じ-ブランスターに感謝!

  • OS:Windows Vista
  • レベル:Ruby on Railsの新機能
  • すでにRuby 1.9.2がインストールされています

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

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

私が走った:

gem install rake

私は再び走った:

rake db:migrate

その後、RubyサーバーでRailsを起動し、すべてを適切に配置することができました。

再びブランスターに感謝します:-)

3
zimini

Rake 0.9.2.2を使用しても同じ問題が発生しました。 bundle execを使用してこの問題を解決しました。

2
Sean Kibler

私はあなた(ミハイルフ)を感じています、それは本当にイライラしています。私はほぼ丸一日、夢中になりました。 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( rubyinstaller-1.9.2-p18 -Windows 7システム)とすべてのgemもクリーンインストールしたため、Rake 0.9.1がなかったと思います。それまでの間、Rake 0.9.2は完全にはインストールされていませんでした。

2
egyamado

"gem uninstall rake"でアンインストールすると、2つのバージョンがインストールされたので、きれいに再インストールしました。

"rake db:create"、データベースが存在することを確認してから"rake db:migrate"で取引を封印します。

2
Christopher

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

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

0
Anuj

走る

bundle exec rake db:migrate

わたしにはできる。

0
user3228456

Rails 2.3の場合、このコミットのようにlib/tasks/rspec.rakeを編集するとうまくいきました:

https://github.com/dchelimsky/rspec-Rails/pull/11/files

0
guapolo