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.