2016-03-09 60 views
103

Durante l'esecuzione di qualsiasi compito rake ottengo:NoMethodError: undefined metodo `last_comment' dopo l'aggiornamento a rastrellare 11

NoMethodError: undefined method `last_comment' for

Questo è stato dopo che bundle update tirato nella nuova versione di rake, la 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: undefined method `last_comment' for #< Rake::Application:0x007ff0cf37be38>

Versioni

  • Rails 3.2.11
  • Rake 11.0.1

risposta

111

Rake 11.0.1 removes il metodo last_comment che Rails 2.3 rspec -core (< 3.4.4) utilizza. Pertanto fino a quando/se una patch viene rilasciata dobbiamo appuntare rastrello per una versione più vecchia 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 rastrello 10.5.0 che ha ancora il metodo last_comment e le nostre attività rake funzioneranno di nuovo.

UPDATE: questo è stato corretto in rspec, quindi l'unica cosa necessaria dovrebbe essere l'aggiornamento di rspec.

+0

Devo usare 'bundle exec' dopo aver fatto questo, come usare ancora' rake' senza il bundle exec ?? – SsouLlesS

+0

@SsouLlesS avresti bisogno di disinstallare rake 11.0 – Kris

+0

Puoi chiarire il tuo "Rails 2.3" usa un commento? Sono su Rails 4 e un 'rake db: create: all' lancia questa eccezione. – yekta

60

in Rails soluzione rapida può essere pubblica ./Rakefile (nella cartella app)

e aggiungere queste righe prima di chiamare Rails.application.load_tasks:

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

così intero Rakefile potrebbe essere simile

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 
+0

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

+9

bello, ci sono i miei 5 minuti di fama: D – equivalent8

+0

Ancora con Rake 11.1.1. – jasnow

20

Questo è un issue in rake che è già stato risolto.

La risposta di @ equivalent8 è una patch di scimmia e deve essere evitata.

Come sottolinea @Kris, questo è un problema isolato per rake 11.0.1. Dato che @Kris ha pubblicato la sua risposta, ci sono nuove versioni di Rake disponibili e, idealmente, potresti essere in grado di stare con i tempi e non essere bloccato a una vecchia versione di rake. Credimi, sono stato lì e non è una buona idea se puoi aiutarlo. Inoltre, questo non è un problema con Rails 2.3 o qualsiasi versione di rail.

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

Poiché last_comment è obsoleto, è necessario aggiornare la dipendenza stessa. Nel mio caso era rspec-core che incidentalmente ha corretto solo questo in v3.4.4.

The Fix

Amplia il tuo dipendenza a una versione che non richiede last_comment ma chiede last_description invece. Probabilmente è rspec e l'aggiornamento da rspec-core a 3.4.4 o superiore lo risolverà. rspec-core < 3.4.4 chiamate last_comment.

Se la dipendenza non dispone di una versione che non richiede last_description, essere un buon cittadino e inviare un PR per risolvere il problema :)

17

l'aggiornamento all'ultima Rspec gemma fa il lavoro:

bundle update rspec-rails

+3

Trovare la mia risposta su StackOverflow - ** 3 anni ** Da quando l'ho scritto - Funziona ancora come per magia :) –

+1

questa non è "sempre" una buona soluzione, questo potrebbe installare una versione rspec -rails non compatibile, è meglio specificare sempre la parola da usare. –

15

Basta aggiornare la gemma rspec-rails

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

abbracci

!

+0

'gem 'rspec-rails', '~> 3.6'' mi ha salvato dal vivo, grazie mille !! E ho pensato che ho qualcosa come last_comment all'interno del mio codice! LOL – user1735921