web-dev-qa-db-ja.com

NoMethodError:rake 11へのアップグレード後の未定義のメソッド `last_comment '

rakeタスクを実行すると、次の結果が得られます。

NoMethodError:undefined method `last_comment 'for

これは、rakeの新しいバージョンであるbundle updateを取り込む11.0.1の後にありました。

$ grep rake Gemfile.lock
       rake
       rake (>= 0.8.7)
     rake (11.0.1)
       rake
$ bundle update
$ bundle exec rake db:drop # any rake task

NoMethodError:#<Rake :: Application:0x007ff0cf37be38>の未定義メソッド `last_comment '

バージョン

  • Rails 3.2.11
  • レーキ11.0.1
124
Kris

Rake 11.0.1 削除last_commentメソッド Rails 2.3 rspec-core(<3.4.4)が使用します。したがって、パッチがリリースされるまでは、Gemfileでrakeを古いバージョンに固定する必要があります。

gem 'rake', '< 11.0'

その後:

$ bundle update
$ grep rake Gemfile.lock 
      rake
      rake (>= 0.8.7)
    rake (10.5.0)
      rake
  rake (< 11.0)

現在、last_commentメソッドを保持するrake 10.5.0を使用しており、rakeタスクが再び機能します。

UPDATE:これはrspecで修正されたため、必要なのはrspecの更新のみです。

145
Kris

Railsのクイック修正は./Rakefileを編集できます(アプリフォルダー内)

Rails.application.load_tasksを呼び出す前に次の行を追加します。

module TempFixForRakeLastComment
  def last_comment
    last_description
  end 
end
Rake::Application.send :include, TempFixForRakeLastComment

したがって、Rakefile全体は次のようになります。

  require File.expand_path('../config/application', __FILE__)
  require 'rake'
  require 'resque/tasks'

+ # temp fix for NoMethodError: undefined method `last_comment'
+ # remove when fixed in Rake 11.x
+ module TempFixForRakeLastComment
+   def last_comment
+     last_description
+   end 
+ end
+ Rake::Application.send :include, TempFixForRakeLastComment
+ ### end of temfix
+ 
  task "resque:preload" => :environment

  Rails.application.load_tasks
72
equivalent8

最新のRspec gemに更新すると動作します。

bundle update rspec-Rails

26
Gal Bracha

Gem rspec-Railsをアップグレードするだけです

現在:gem 'rspec-Rails', '~> 3.5', '>= 3.5.2'

抱擁!

20
EderCosta

これは rakeの問題 であり、すでに対処されています。

@ equivalent8による答えは猿のパッチであり、避けるべきです。

@Krisが指摘しているように、これはrake 11.0.1に孤立した問題です。 @Krisが答えを投稿してから、Rakeの新しいバージョンが利用可能になりました。理想的には、古いバージョンのrakeに固定されることなく、時代にとどまることができます。私を信じて、私はそこにいましたが、あなたがそれを助けることができるなら、それは良い考えではありません。また、これはRails 2.3またはRailsのどのバージョンでも問題ではありません。

Rake < v11.0.1または> v11.0.1 and < v12は動作しますが、これは回避策であり、回避する必要があります。理想的には時代にとどまることができるでしょう。

last_commentは非推奨になっているため、依存関係自体をアップグレードする必要があります。私の場合、偶然に v3.4.4 でこれを修正したのはrspec-coreでした。

修正

依存関係をlast_commentを呼び出さないが、代わりにlast_descriptionを呼び出すバージョンにアップグレードします。おそらくrspecであり、rspec-coreを3.4.4以降にアップグレードすると修正されます。 rspec-core <3.4.4はlast_commentを呼び出します。

依存関係にlast_descriptionを呼び出さないバージョンがない場合は、良き市民になり、それを修正するためにPRを送信してください:)

20
yekta