webentwicklung-frage-antwort-db.com.de

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

Wenn ich eine rake Task starte, bekomme ich:

NoMethodError: undefinierte Methode `last_comment 'für

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

Versionen

  • Schienen 3.2.11
  • Rechen 11.0.1
127
Kris

Rake 11.0.1 entfernt die Methode last_comment Welche Schienen 2.3 rspec-core (<3.4.4) verwendet. Daher müssen wir Rake bis zur Veröffentlichung eines Patches an eine ältere Version in Gemfile anheften:

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 immer noch die Methode last_comment Hat und unsere rake Tasks werden wieder funktionieren.

[~ # ~] update [~ # ~] : Dies wurde jetzt in rspec behoben, daher sollte das einzige, was notwendig ist, die Aktualisierung von rspec sein.

151
Kris

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

und füge diese Zeilen hinzu, bevor du Rails.application.load_tasks aufrufst:

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

so könnte das ganze Rakefile 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
72
equivalent8

Update auf das neueste Rspec gem erledigt die Arbeit:

bundle update rspec-Rails

26
Gal Bracha

Werte einfach das Juwel auf rspec-Rails

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

umarmungen!

21
EderCosta

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

Die Antwort von @ equivalent8 ist ein Affen-Patch und sollte vermieden werden.

Wie @Kris betont, handelt es sich hierbei um ein Problem, das nur bei rake 11.0.1 Auftritt. Da @Kris seine Antwort gepostet hat, sind neue Versionen von Rake verfügbar. Idealerweise können Sie mit der Zeit gehen und sind nicht an eine alte Version von Rake gebunden. 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 beliebigen Version von Rails.

Jeder Rake < v11.0.1 Oder > v11.0.1 and < v12 Funktioniert, aber dies ist immer noch ein Workaround und sollte auch vermieden werden. im Idealfall können Sie mit der Zeit bleiben.

Da last_comment Veraltet ist, sollte die Abhängigkeit selbst aktualisiert werden. In meinem Fall war es rspec-core, Das dies übrigens nur in v3.4.4 behoben hat.

Der Fix

Aktualisieren Sie Ihre Abhängigkeit auf eine Version, die nicht last_comment, Sondern last_description Aufruft. Es ist wahrscheinlich rspec und ein Upgrade von rspec-core Auf 3.4.4 oder höher wird das Problem beheben. rspec-core <3.4.4 ruft last_comment Auf.

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

20
yekta