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


130

rakeタスクを実行すると、次のようになります。

NoMethodError:未定義のメソッド「last_comment」

その後bundle update、rakeの新しいバージョンversionが導入されました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

回答:


159

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

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タスクは再び機能します。

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


私はbundle execこれを実行した後に使用する必要がありますrakeが、バンドルexecなしでまだ使用する方法は?
svelandiag 2016年

「Rails 2.3」の使用コメントを明確にできますか?私はRails 4とrake db:create:allこの例外をスローします。
yekta 2016年

@yekta Rails 2.3は、Rakeに呼び出されるメソッドがあることを期待しています last_commentいます。コードベースでは、これは覚えていません。Rails 4も呼び出すかどうかはわかりませんlast_comment。しかし、あなたはレールがレール4支店とgrep「last_comment」の中に、スイッチをコードベースチェックアウト可能性がありRakefile*.task
クリス

7
それでも2017年に私たちのベーコンを保存し、このをありがとう
ニックSchwaderer

2
@luke rspec 3.5以降。
クリス

73

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

ありがとう。Rake 11.1.0以降は不要
sethcall

10
いいですね、5分間の名声があります:D
同等8

3
の削除last_comment は元に戻されたように見え、代わりにrake 12.0で削除されます。
Kris

3
rake 12.0.0にアップグレードした後、このエラーが発生し始めました。@ equivalent8の一時修正がうまくいきました。
ブラックウッド2017年

1
rspec-core-3.5.4にアップグレードすると問題が解決し、この回答でサルのパッチを削除できました。
ネオタピル2017年

27

最新のRspecgemに更新すると機能します。

bundle update rspec-rails


7
StackOverflowで自分の答えを見つける- 私が書いてから3年 -それでも魔法のように動作します:)
Gal Bracha

3
これは「常に」良い解決策ではありません。互換性のないrspec -railsバージョンをインストールする可能性があります。使用するバージョンを常に指定することをお勧めします。
アーノルドロア2018年

21

宝石をアップグレードするだけ rspec-rails

今: gem 'rspec-rails', '~> 3.5', '>= 3.5.2'

抱擁!


1
gem 'rspec-rails', '~> 3.6'私のライブを救った、本当にありがとう!! そして、私はコード内にlast_commentのようなものがあると思いました!LOL
user1735921

20

これはすでに解決されている熊手での問題です。

@ equivalent8による答えはサルのパッチであり、避ける必要があります。

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

レーキ< v11.0.1または> v11.0.1 and < v12動作しますが、これはまだ周りの仕事であり、また避けるべきです。理想的には、時代と共に過ごすことができるでしょう。

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

修正

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

依存関係にを呼び出さないバージョンがないlast_description場合は、善良な市民となり、PRを送信して修正してください。

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