NoMethodError: metodo indefinito `last_comment 'dopo l'aggiornamento a rake 11


130

Quando eseguo qualsiasi rakeattività ottengo:

NoMethodError: metodo non definito `last_comment 'per

Questo è stato dopo il bundle updatequale è stata inserita la nuova versione di rake, versione 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: metodo indefinito `last_comment 'per # <Rake :: Applicazione: 0x007ff0cf37be38>

versioni

  • Rotaie 3.2.11
  • Rastrello 11.0.1

Risposte:


159

Rake 11.0.1 rimuove il last_commentmetodo cheRotaie 2.3usi rspec-core (<3.4.4). Pertanto, fino a quando / se viene rilasciata una patch, è necessario aggiungere il rake a una versione precedente in Gemfile:

gem 'rake', '< 11.0'

poi:

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

Ora stiamo usando il rake 10.5.0 che ha ancora il last_commentmetodo e le nostre rakeattività funzioneranno di nuovo.

AGGIORNAMENTO : questo problema è stato risolto in rspec, quindi l'unica cosa necessaria dovrebbe essere l'aggiornamento di rspec.


Devo usare bundle execdopo fare questo, come usare ancora rakesenza il bund exec exec ??
svelandiag,

Puoi chiarire il tuo commento su "Rails 2.3"? Sono su Rails 4 e rake db:create:alllancio questa eccezione.
Ekta,

@yekta Rails 2.3 si aspetta che Rake abbia un metodo chiamato last_comment, dove nella base di codice questo non ricordo. Non so se Rails 4 chiama anche last_comment. Ma potresti dare un'occhiata al codebase di rails, passare al ramo di Rails 4 e grep per "last_comment" in Rakefilee *.task.
Kris

7
Grazie per questo, conservando ancora la nostra pancetta nel 2017.
Nick Schwaderer,

2
@luke rspec 3.5 o versioni successive.
Kris,

73

in Rails la correzione rapida può essere modificata ./Rakefile(nella cartella dell'app)

e aggiungi queste linee prima di chiamare Rails.application.load_tasks:

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

così intero Rakefilepotrebbe sembrare

  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

Grazie. Non più necessario a partire da Rake 11.1.0
sethcall

10
bello, ecco i miei 5 minuti di fama: D
equivalente8

3
Sembra che la rimozione di sia last_comment stata ripristinata e ora verrà invece rimossa in rake 12.0.
Kris

3
Dopo l'aggiornamento a rake 12.0.0 ho iniziato a vedere questo errore. La correzione temporanea di @ equivalent8 ha funzionato per me.
Blackwood,

1
L'aggiornamento a rspec-core-3.5.4 ha risolto questo problema per me e sono stato in grado di rimuovere la patch di scimmia in questa risposta.
Neontapir,

27

L'aggiornamento all'ultima Rspecgemma funziona:

bundle update rspec-rails


7
Trovare la mia risposta su StackOverflow - 3 anni da quando l'ho scritto - Funziona ancora come per magia :)
Gal Bracha,

3
questa non è "sempre" una buona soluzione, potrebbe installare una versione non compatibile di rspec -rails, è meglio specificare sempre la versione da utilizzare.
Arnold Roa,

21

Aggiorna la gemma rspec-rails

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

abbracci!


1
gem 'rspec-rails', '~> 3.6'mi ha salvato la vita, grazie mille !! E ho pensato di avere qualcosa come last_comment nel mio codice! LOL
user1735921

20

Questo è un problema nel rake che è già stato risolto.

La risposta di @ equivalenza8 è una patch scimmia e dovrebbe essere evitata.

Come sottolinea @Kris, questo è un problema isolato rake 11.0.1. Dato che @Kris ha pubblicato la sua risposta, ci sono nuove versioni di Rake disponibili e idealmente si sarebbe in grado di stare al passo con i tempi e di non essere bloccati a una vecchia versione di rake. Credetemi, ci sono stato e non è una buona idea se potete aiutarlo. Inoltre, questo non è un problema con Rails 2.3 o qualsiasi versione di rails.

Qualsiasi rastrello < v11.0.1o > v11.0.1 and < v12funzionerà ma questo è ancora un problema e dovrebbe anche essere evitato; idealmente sarai in grado di stare al passo con i tempi.

Poiché last_commentè deprecato, la dipendenza stessa dovrebbe essere aggiornata. Nel mio caso è stato ciò rspec-coreche, per inciso, è stato risolto solo in v3.4.4 .

La correzione

Aggiorna la tua dipendenza a una versione che non chiama last_commentma chiama last_descriptioninvece. Probabilmente risolverà il problema rspece l'aggiornamento rspec-corea 3.4.4 o versioni successive. rspec-core<3.4.4 chiamate last_comment.

Se la tua dipendenza non ha una versione che non chiama last_description, sii un buon cittadino e invia un PR per risolverlo :)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.