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
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.
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
Mettre à jour à la dernière Rspec
gem fait le travail:
bundle update rspec-Rails
Juste mettre à jour le joyau rspec-Rails
Maintenant: gem 'rspec-Rails', '~> 3.5', '>= 3.5.2'
câlins!
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 :)