web-dev-qa-db-fra.com

NoMethodError: méthode indéfinie `last_comment 'après la mise à niveau vers rake 11

Lors de l'exécution d'une tâche rake, je reçois:

NoMethodError: méthode non définie `last_comment 'pour

C'était après bundle update qui a introduit la nouvelle version de rake, 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: méthode non définie `last_comment 'pour # <Rake :: Application: 0x007ff0cf37be38>

Versions

  • Rails 3.2.11
  • Rake 11.0.1
127
Kris

Rake 11.0.1 supprime la méthode last_comment qui Rails 2.3 rspec-core (<3.4.4) utilise. Par conséquent, jusqu'à ce que/si un patch est publié, nous devons épingler rake à une version plus ancienne de Gemfile:

gem 'rake', '< 11.0'

ensuite:

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

Nous utilisons maintenant rake 10.5.0 qui a toujours la méthode last_comment et nos tâches rake fonctionneront à nouveau.

UPDATE: Ceci a été corrigé dans rspec, la seule chose nécessaire devrait donc être de mettre à jour rspec.

151
Kris

dans Rails solution rapide peut être modifier ./Rakefile (dans votre dossier d'application)

et ajoutez ces lignes avant d'appeler Rails.application.load_tasks:

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

si entier Rakefile pourrait ressembler

  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

Mettre à jour à la dernière Rspec gem fait le travail:

bundle update rspec-Rails

26
Gal Bracha

Juste mettre à jour le joyau rspec-Rails

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

câlins!

21
EderCosta

Ceci est un problème dans rake qui a déjà été abordé.

La réponse de @ equivalent8 est un patch de singe et doit être évitée.

Comme @Kris le souligne, il s’agit d’un problème isolé de rake 11.0.1. Depuis que @Kris a posté sa réponse, de nouvelles versions de Rake sont disponibles et, idéalement, vous pourrez rester avec l’époque et ne pas être épinglées à une ancienne version de rake. Croyez-moi, j'y suis allé et ce n'est pas une bonne idée si vous pouvez l'aider. De plus, ce n'est pas un problème avec Rails 2.3 ou toute version de Rails.

Tout Rake < v11.0.1 ou > v11.0.1 and < v12 fonctionnera, mais il s’agit toujours d’un contournement et doit également être évité; idéalement, vous pourrez rester avec le temps.

Puisque last_comment est obsolète, la dépendance elle-même devrait être mise à niveau. Dans mon cas, c’est rspec-core qui, incidemment, ne l’a corrigé que dans v3.4.4 .

Le correctif

Mettez à niveau votre dépendance vers une version qui n’appelle pas last_comment mais appelle plutôt last_description. Son probablement rspec et la mise à niveau de rspec-core à la version 3.4.4 ou supérieure le résoudra. rspec-core <3.4.4 appelle last_comment.

Si votre dépendance n'a pas de version qui n'appelle pas last_description, soyez un bon citoyen et soumettez un PR pour le corriger :)

20
yekta