Rake 0.9.0を使用した未定義のメソッド「タスク」


132

Rakeを最新バージョン(0.9.0.beta.4)に更新したところ、rakeコマンドは次のエラーメッセージで終了しました。

rake aborted!
undefined method `task' for #<Anelis::Application:0x9223b6c>

ここにトレースがあります:

undefined method `task' for #<Anelis::Application:0x97ef80c>
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/railties-3.0.3/lib/rails/application.rb:214:in `initialize_tasks'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/railties-3.0.3/lib/rails/application.rb:139:in `load_tasks'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/railties-3.0.3/lib/rails/application.rb:77:in `method_missing'
/home/amokrane/Documents/prog/web/learning_rails/anelis/Rakefile:7:in `load_string'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/environment.rb:28:in `eval'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/environment.rb:28:in `load_string'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/environment.rb:16:in `load_rakefile'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/application.rb:495:in `raw_load_rakefile'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/application.rb:78:in `block in load_rakefile'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/application.rb:129:in `standard_exception_handling'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/application.rb:77:in `load_rakefile'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/application.rb:61:in `block in run'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/application.rb:129:in `standard_exception_handling'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/application.rb:59:in `run'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/bin/rake:31:in `<top (required)>'
/usr/local/rvm/gems/ruby-1.9.2-p136/bin/rake:19:in `load'
/usr/local/rvm/gems/ruby-1.9.2-p136/bin/rake:19:in `<main>'

誰かが同じ問題を経験しましたか?何が間違っているのでしょうか?私が実行していることに注意してくださいRails 3.0.3、あなたは私のGemfileの内容にも興味があるかもしれません:

source 'http://rubygems.org'
gem 'rails', '3.0.3'
gem 'sqlite3-ruby', :require => 'sqlite3'
gem 'mysql2'
gem 'legacy_data'
gem 'resources_controller', :git => 'git://github.com/ianwhite/resources_controller'
gem 'will_paginate', '3.0.pre' # pagination
gem 'jquery-rails', '>= 0.2.6'
gem "rmagick" # sudo aptitude install libmagick9-dev
gem "paperclip", "~> 2.3"
gem "nested_form", :git => "git://github.com/madebydna/nested_form.git"
gem "meta_search"
gem "hirb"
gem "devise"
gem "rails_admin", :git => "git://github.com/sferik/rails_admin.git"

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


7
問題はrake-0.0.9(リリース済み)にもあると思います。
Kedar Mhaswade、

4
あなたは熊手、バージョン0.9.0を意味します。しかし、そう、それは壊れています。
Rob

これは私がやっていることの問題ですか、それともこの特定のバージョンの熊手に問題がありますか?ありがとう、N
ifightcrime

ちょうどそれを理解しようとしてこの問題にも出くわした
ムハンマドウスマン

回答:


119

Rakeの0.9.0.beta.4バージョンを実行しているときにも同じ例外がありました。新しいものRake::DSLが正しくロードされていないようです。

そこで、次のコードをRakefileに追加しました。

require 'rake'

# Rake Fix Code start
# NOTE: change 'Anelis' to your app's module name (see config/application.rb)
module ::Anelis
  class Application
    include Rake::DSL
  end
end

module ::RakeFileUtils
  extend Rake::FileUtilsExt
end
# Rake Fix Code end

MyApp::Application.load_tasks

そうすれば、Rakeタスクを再度実行することができました。

これはエレガントな解決策ではないことを知っています。ただし--pre、Rake のバージョンを使用する必要がある場合は、このクイックハックを使用しても大丈夫かもしれません。


ヒントについてmordarosoに感謝します!
Amokrane Chentir 2011年

14
"module :: Anelis"の行をrailsアプリの名前と一致するものに変更してください。IE "module :: Myapp"忘れていましたが、この解決策は私の間違いに気づくまで機能しませんでした。
Scott Swezey、

1
ヒントについてmordarosoに感謝します。Anelisをアプリ名に変更し、マジックコードをYourAppName :: Application.load_tasks行の前に追加してください。そうしないと、エラーが引き続き発生します
Giang Nguyen

10
そして、あなたが間にこれを入れて作るrequire 'rake'MyApp::Application.load_tasks
のJIT

これは0.9.0フルリリースでも存続しているようです。これがレールやレーキで修正されるまで、Gemfile.lockでレーキを0.8.7に戻しました。アンドレイによる以下の答えはこれを示唆しているようです。
sj26、2011年

158

mordarosoの回答で説明されているように、Rake 0.9.0には問題があります。これを回避するには、Rakeを一時的にダウングレードする必要があります。

  1. 実行:(を使用しない限りgem uninstall rake -v 0.9追加)sudorvm

  2. Gemfileに追加: gem 'rake', '~> 0.8.7'

  3. 次に実行します: bundle update

最初のステップはスキップできますが、次にをrake使用して実行する必要があります。次にbundle exec例を示します。

bundle exec rake db:migrate

そうしないと、次のエラーが発生します。

rake aborted!
You have already activated rake 0.9.0, but your Gemfile requires rake 0.8.7. Consider using bundle exec.

更新

Alex ChaffeeがPablo Canteroの回答に対するコメントで気づいたように、問題が引き続き表示される場合は、Rakeをアンインストールするために以下を実行する必要があるかもしれません

rvm use @global && gem uninstall rake -v 0.9.0
rvm use @       && gem uninstall rake -v 0.9.0

また、デュークの回答で提案された解決策を試してください。


2
これは最も「ハッキー」なソリューションだと思います。機能しbundle exec rakeているバンドルバージョンを使用するには、rakeを実行する必要がある場合があります。
スチュアートK

2
@Stuart Kは、bundle exec rakerake-0.9がアンインストールされなかった場合にのみ必要です。この場合、エラーメッセージが表示されますrake aborted! You have already activated rake 0.9.0, but your Gemfile requires rake 0.8.7. Consider using bundle exec.
Andrei

1
この問題はRails 3.0.7にも存在し、RailsのgemにはRake> = 0.8.7が必要であり、利用可能として0.9を取り込みます...
Matthew Savage

3
さらに使用するハックは少なくなります。gem 'rake', '~> 0.8.7'
FábioBatista

「gemfileに追加する」とは、正確にはどういう意味ですか?このGemfileはどこにありますか?申し訳ありませんが、n00bの質問
Adnanは

40

注:これはRails 3.0.8で修正されたばかりです。

Rakeの新しいバージョンでは、DSLコマンド(タスク、ファイル、desc、インポートなど)がObject名前空間のルートに配置されなくなりました(Objectに配置することは、すべてのオブジェクトにタスクコマンドがあることを意味しますが、あまり良くありません。DSLコマンドはRake::DSL module、コマンドを必要とする任意のモジュールにを混ぜることで利用できます。

Ruby on RailsがRake 0.9.xで動作するように更新されるまで、次のコードをプロジェクトのRakefileに "require rake"の後、を呼び出す前に配置しますApplication.load_tasks

class Rails::Application
  include Rake::DSL if defined?(Rake::DSL)
end

Rails 3.0.7を使用していて、rakeが0.9.0に更新されていますが、デフォルトではGemfile.lockで0.8.7なので、0.9.0に更新すると、Duke
Jagdish Barabari

16

これと同じエラーに関するrails_adminの問題を作成しました。

答え

これは一般的なRailsの問題です:http : //twitter.com/dhh/status/71966528744071169

すぐにそれを修正する3.0.8リリースがあるはずです。それまでの間、次の行をGemfileに追加できます。

ジェム「レーキ」、「〜> 0.8.7」

これはRake(0.9.0)の問題で、DHHによってTwitterで発表されました。

昨日リリースされたRake 0.9はRails(およびその他)を壊しました。修正を待つ間、Gemfileにgem 'rake'、 '0.8.7'が必要です。


2
PATHにrake 0.9.0の/ binディレクトリがまだある場合、これでは不十分な場合があります。実際にrakeをアンインストールするには、実行する必要がありますgem uninstall rake --version 0.9.0 && gem install rake --version 0.8.7(2番目のインストールは実行可能ファイルを戻すことです)。
AlexChaffee 2011年

1
そして、rake 0.9.0がrvmグローバルgemsetに組み込まれた場合、あなたはしなければなりませんrvm use @global && gem uninstall rake --version 0.9.0 && rvm use @ && gem uninstall rake --version 0.9.0 && gem install rake --version 0.8.7
AlexChaffee



2

私はrvmを使用していますが、アンインストールしても役に立ちません。だから私は.rvm/gems/ruby@globalディレクトリからすべての0.9ファイルを手動で削除し、すべてが以前のようになります!


0

Rake 0.9.xをアンインストールする必要なく、追加

ジェム「レーキ」、「〜> 0.8.7」

あなたのGemfileに入力して

bundle exec rake -T


0.9.1で問題が修正されたので、0.8.7にダウングレードする代わりにそのバージョンを使用できることに注意してください。
Amokrane Chentir
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.