运行任何rake
任务时,我得到:
NoMethodError:
的未定义方法`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:#<未定义的方法`last_comment'耙::应用:0x007ff0cf37be38>
版本
答案 0 :(得分:142)
Rake 11.0.1 removes Rails 2.3 rspec-core(< 3.4.4)使用的last_comment
方法。因此,如果补丁被释放,我们需要将rake引脚到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。
答案 1 :(得分:71)
可以编辑./Rakefile
(在你的app文件夹中)
并在调用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
答案 2 :(得分:26)
更新到最新的Rspec
gem可以完成工作:
bundle update rspec-rails
答案 3 :(得分:20)
这已经解决了issue in rake。
@ equivalent8的回答是一个猴子补丁,应该避免。
正如@Kris指出的那样,这是一个与rake 11.0.1
隔离的问题。由于@Kris已经发布了他的答案,因此可以使用Rake的新版本,理想情况下,您可以与时俱进,而不是固定在旧版本的rake上。相信我,我一直在那里,如果你可以帮助它,这不是一个好主意。这也不是Rails 2.3或任何版本的rails的问题。
任何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
&lt; 3.4.4调用last_comment
。
如果您的依赖项没有不会调用last_description
的版本,请成为一名好公民并提交PR来修复它:)
答案 4 :(得分:20)
只需升级gem rspec-rails
现在:gem 'rspec-rails', '~> 3.5', '>= 3.5.2'
拥抱!