NoMethodError: undefined метод `last_comment 'после обновления до рейка 11
При выполнении любой задачи rake
я получаю:
NoMethodError: undefined метод `last_comment 'для
Это было после bundle update
, который вытащил новую версию rake, версия 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 метод `last_comment 'для # < Rake:: Применение: 0x007ff0cf37be38 >
Версии
Ответы
Ответ 1
Rake 11.0.1 удаляет метод last_comment
, который Rails 2.3 rspec-core (< 3.4. 4). Поэтому до тех пор, пока/если патч не будет выпущен, нам нужно связать рейк с более старой версией в Gemfile:
gem 'rake', '< 11.0'
то
$ bundle update
$ grep rake Gemfile.lock
rake
rake (>= 0.8.7)
rake (10.5.0)
rake
rake (< 11.0)
Теперь мы используем rake 10.5.0, который все еще имеет метод last_comment
, и наши задачи rake
будут работать снова.
UPDATE: теперь это исправлено в rspec, поэтому необходимо только обновить rspec.
Ответ 2
в Rails quick fix может быть отредактировано ./Rakefile
(в папке вашего приложения)
и добавьте эти строки перед вызовом Rails.application.load_tasks
:
module TempFixForRakeLastComment
def last_comment
last_description
end
end
Rake::Application.send :include, TempFixForRakeLastComment
поэтому целые Rakefile
могут выглядеть как
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
Ответ 3
Это проблема в грабли, которая уже исправлена.
Ответ на @equal8 является патчем обезьяны, и его следует избегать.
Как указывает @Kris, это проблема, выделенная для rake 11.0.1
. Поскольку @Kris опубликовал свой ответ, доступны новые версии Rake и, в идеале, вы сможете оставаться со временем и не привязываться к старой версии рейка. Поверьте мне, я был там, и это не очень хорошая идея, если вы можете это сделать. Также это не проблема с Rails 2.3 или любой версией рельсов.
Любой Rake < v11.0.1
или > v11.0.1 and < v12
будет работать, но это все еще работает, и его также следует избегать; в идеале вы сможете остаться со временем.
Так как last_comment
устаревает, сама зависимость должна быть обновлена. В моем случае это был rspec-core
, который, кстати, фиксировал это только в v3.4.4.
Исправление
Обновите свою зависимость до версии, которая не вызывает last_comment
, а вызывает last_description
. Вероятно, это будет rspec
и обновление rspec-core
до 3.4.4 или выше. rspec-core
< 3.4.4 вызовы last_comment
.
Если ваша зависимость не имеет версии, которая не вызывает last_description
, будьте хорошим гражданином и отправьте PR, чтобы исправить ее:)
Ответ 4
Просто обновите драгоценный камень rspec-rails
Теперь: gem 'rspec-rails', '~> 3.5', '>= 3.5.2'
объятия!
Ответ 5
Обновление до последней версии Rspec
делает работу:
bundle update rspec-rails