NoMethodError: undefined method `last_comment 'po aktualizacji do rake 11


130

Podczas uruchamiania dowolnego rakezadania otrzymuję:

NoMethodError: undefined method `last_comment 'for

To było po bundle updateczym ściągnąłem nową wersję rake, wersję 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: undefined method `last_comment 'for # <Rake :: Application: 0x007ff0cf37be38>

Wersje

  • Szyny 3.2.11
  • Rake 11.0.1

Odpowiedzi:


160

Rake 11.0.1 usuwalast_comment metodą, któraSzyny 2.3rspec-core (<3.4.4) używa. Dlatego do / jeśli łatka zostanie wydana, musimy przypiąć rake do starszej wersji w Gemfile:

gem 'rake', '< 11.0'

następnie:

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

Używamy teraz rake'a 10.5.0, który wciąż ma tę last_commentmetodę, a nasze rakezadania znów będą działać.

UPDATE : Zostało to naprawione w rspec, więc jedyną potrzebną rzeczą powinna być aktualizacja rspec.


Muszę użyć bundle execpo zrobieniu tego, jak po prostu nadal używać rakebez pakietu exec ??
— svelandiag

Czy możesz wyjaśnić, że Twoje "Rails 2.3" używa komentarza? Jestem na Rails 4 i rake db:create:allzgłasza ten wyjątek.
— yekta

@yekta Rails 2.3 oczekuje, że Rake będzie miał metodę o nazwie last_comment, której w bazie kodu nie pamiętam. Nie wiem, czy Rails 4 również wywołuje last_comment. Ale możesz sprawdzić bazę kodów Rails, przełączyć się do gałęzi Rails 4 i grep dla "last_comment" w Rakefilei *.task.
— Kris

7
Dziękuję za to, wciąż ratując nasz boczek w 2017 roku.
— Nick Schwaderer

2
@luke rspec 3.5 lub nowszy.
— Kris

74

w Railsach można edytować szybką poprawkę ./Rakefile(w folderze aplikacji)

i dodaj te linie, zanim zadzwonisz Rails.application.load_tasks:

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

więc całość Rakefilemoże wyglądać

  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

Dzięki. Nie jest już potrzebne od Rake 11.1.0
— sethcall

10
fajnie, idzie moje 5 minut sławy: D
— odpowiednik8

3
Wygląda na to, że usunięcie last_comment konta zostało cofnięte i zostanie zamiast tego usunięte w rake 12.0.
— Kris

3
Po aktualizacji do rake 12.0.0 zacząłem widzieć ten błąd. Poprawka tymczasowa @ ekwiwalentu8 zadziałała dla mnie.
— Blackwood

1
Aktualizacja do rspec-core-3.5.4 rozwiązała ten problem i udało mi się usunąć poprawkę małpy w tej odpowiedzi.
— neontapir

27

Aktualizacja do najnowszego Rspecklejnotu działa:

bundle update rspec-rails


7
Znalezienie własnej odpowiedzi na StackOverflow - 3 lata odkąd to napisałem - Nadal działa jak magia :)
— Gal Bracha

3
nie jest to "zawsze" dobre rozwiązanie, może to spowodować zainstalowanie niezgodnej wersji rspec -rails, lepiej zawsze określać wersję, która ma być używana.
— Arnold Roa

21

Po prostu ulepsz klejnot rspec-rails

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

uściski!


1
gem 'rspec-rails', '~> 3.6'uratował mi życie, wielkie dzięki !! I pomyślałem, że mam w kodzie coś w rodzaju last_comment! LOL
— user1735921

20

Jest to problem z prowizją , który został już rozwiązany.

Odpowiedzią @ ekwiwalent8 jest łatka małpy i należy jej unikać.

Jak wskazuje @Kris, jest to problem ograniczony rake 11.0.1. Odkąd @Kris opublikował swoją odpowiedź, dostępne są nowe wersje Rake i idealnie byłoby, gdybyś był w stanie dotrzymać kroku czasom i nie zostać przypięty do starej wersji rake. Wierz mi, byłem tam i nie jest to dobry pomysł, jeśli możesz temu zapobiec. Nie jest to również problem z Railsami 2.3 ani żadną inną wersją railsów.

Any Rake < v11.0.1lub> v11.0.1 and < v12 będą działać, ale nadal jest to obejście i należy go również unikać; idealnie będziesz w stanie nadążyć za duchem czasu.

Ponieważ last_commentjest przestarzała, sama zależność powinna zostać zaktualizowana. W moim przypadku to, rspec-corenawiasem mówiąc, naprawiło to tylko w wersji 3.4.4 .

Poprawka

Uaktualnij swoją zależność do wersji, która nie wywołuje, last_commentale wywołuje last_description. Prawdopodobnie rspeci aktualizacja rspec-coredo wersji 3.4.4 lub nowszej naprawi to. rspec-core<3.4.4 połączeń last_comment.

Jeśli twoja zależność nie ma wersji, która nie dzwoni last_description, bądź dobrym obywatelem i prześlij PR, aby to naprawić :)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.