NoMethodError: undefinierte Methode `last_comment 'nach dem Upgrade auf Rake 11

130

Wenn rakeich eine Aufgabe ausführe, bekomme ich:

NoMethodError: undefinierte Methode `last_comment 'für

Dies war nach bundle updatedem in der neuen Version von Rake, Version gezogen 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: undefinierte Methode `last_comment 'für # <Rake :: Application: 0x007ff0cf37be38>

Versionen

  • Schienen 3.2.11
  • Rechen 11.0.1
Kris
quelle

Antworten:

159

Rake 11.0.1 entfernt die last_commentMethode, dieSchienen 2.3rspec-core (<3.4.4) verwendet. Daher müssen wir bis zur Veröffentlichung eines Patches Rake auf eine ältere Version in Gemfile pinnen:

gem 'rake', '< 11.0'

dann:

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

Wir verwenden jetzt Rake 10.5.0, das noch über die last_commentMethode verfügt , und unsere rakeAufgaben werden wieder funktionieren.

UPDATE : Dies wurde jetzt in rspec behoben, daher sollte nur rspec aktualisiert werden.

Kris
quelle
Ich muss danach verwenden bundle exec, wie kann ich nur noch rakeohne das Bundle Exec verwenden?
Svelandiag
Können Sie klarstellen, dass Ihre "Rails 2.3" Kommentare verwenden? Ich bin auf Rails 4 und rake db:create:allwirft diese Ausnahme.
Yekta
@yekta Rails 2.3 erwartet, dass Rake eine Methode namens hat last_comment, an die ich mich in der Codebasis nicht erinnere. Ich weiß nicht, ob Rails 4 auch anruft last_comment. Sie können jedoch die Rails-Codebasis auschecken, zum Rails 4-Zweig wechseln und nach "last_comment" in Rakefileund suchen *.task.
Kris
7
Vielen Dank dafür, noch unseren Speck im Jahr 2017 speichern.
Nick Schwaderer
2
@luke rspec 3.5 oder höher.
Kris
73

In Rails kann die Schnellkorrektur bearbeitet werden ./Rakefile(in Ihrem App-Ordner).

und fügen Sie diese Zeilen hinzu, bevor Sie anrufen Rails.application.load_tasks:

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

so Rakefilekönnte ganz aussehen

  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
Äquivalent8
quelle
Vielen Dank. Ab Rake 11.1.0
sethcall
10
schön, da geht meine 5 Minuten Ruhm: D
Äquivalent8
3
Es sieht so aus, als ob das Entfernen von last_comment zurückgesetzt wurde und stattdessen in Rake 12.0 entfernt wird.
Kris
3
Nach dem Upgrade auf Rake 12.0.0 wurde dieser Fehler angezeigt. @ äquivalent8's Temp Fix hat bei mir funktioniert.
Blackwood
1
Ein Upgrade auf rspec-core-3.5.4 hat dies für mich behoben und ich konnte den Affen-Patch in dieser Antwort entfernen.
Neontapir
27

Das Update auf das neueste RspecJuwel erledigt die Arbeit:

bundle update rspec-rails

Gal Bracha
quelle
7
Meine eigene Antwort auf StackOverflow finden - 3 Jahre, seit ich sie geschrieben habe - Funktioniert immer noch wie Magie :)
Gal Bracha
3
Dies ist nicht "immer" eine gute Lösung. Dies könnte eine nicht kompatible rspec -rails-Version installieren. Es ist besser, immer die zu verwendende Version anzugeben.
Arnold Roa
21

Rüste einfach den Edelstein auf rspec-rails

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

Umarmungen!

EderCosta
quelle
1
gem 'rspec-rails', '~> 3.6'hat mein Leben gerettet, vielen Dank !! Und ich dachte, ich hätte so etwas wie last_comment in meinem Code! LOL
user1735921
20

Dies ist ein Problem bei Rake , das bereits behoben wurde.

Die Antwort von @ äquivalent8 ist ein Affenfeld und sollte vermieden werden.

Wie @Kris hervorhebt, ist dies ein isoliertes Problem rake 11.0.1. Da @Kris seine Antwort veröffentlicht hat, sind neue Versionen von Rake verfügbar. Idealerweise können Sie mit der Zeit bleiben und nicht an eine alte Version von Rake gebunden sein. Glauben Sie mir, ich war dort und es ist keine gute Idee, wenn Sie helfen können. Auch dies ist kein Problem mit Rails 2.3 oder einer anderen Version von Rails.

Jeder Rechen < v11.0.1oder > v11.0.1 and < v12wird funktionieren, aber dies ist immer noch eine Problemumgehung und sollte auch vermieden werden. Idealerweise können Sie mit der Zeit bleiben.

Da last_commentes veraltet ist, sollte die Abhängigkeit selbst aktualisiert werden. In meinem Fall war es das, rspec-corewas dies übrigens nur in v3.4.4 behoben hat .

Die Reparatur

Aktualisieren Sie Ihre Abhängigkeit auf eine Version, die nicht last_commentanruft, sondern last_descriptionstattdessen anruft . Es ist wahrscheinlich rspecund ein Upgrade rspec-coreauf 3.4.4 oder höher wird es beheben. rspec-core<3.4.4 Anrufe last_comment.

Wenn Ihre Abhängigkeit keine Version hat, die nicht anruft last_description, seien Sie ein guter Bürger und reichen Sie eine PR ein, um das Problem zu beheben :)

Yekta
quelle