我仍然收到rake/rdoctask被弃用的警告。

20

我执行了bundle update命令,但在运行rake命令后仍然收到rake/rdoctask已弃用的警告。

WARNING: 'require 'rake/rdoctask'' is deprecated.  Please use 'require 'rdoc/task' (in RDoc 2.4.2+)' instead.
    at /home/cheetah/.rvm/gems/ruby-1.8.7-p302@tobiska/gems/rake-0.9.2.2/lib/rake/rdoctask.rb

我试图阅读这个提示http://matthew.mceachen.us/blog/howto-fix-rake-rdoctask-is-deprecated-use-rdoc-task-instead-1169.html,但我的Rakefile文件没有问题。

我不知道该如何解决这个问题。有什么建议吗?非常感谢。

Martin


1
我仍在处理一些项目中的问题。尽管已经处理了所有明显的事情(如rdoc等),但问题仍然困扰着我。我强烈怀疑项目中的某些gems..但是追踪问题是一个问题。有人知道如何让ruby/rake报告导致警告的精确代码位置吗? - tardate
3个回答

19

您可以在系统上拥有多个版本的rake,并通过运行以下命令查看它们:

$ gem list
=> rake

(0.9.2.2, 0.9.2, 0.8.7) 为了在我的项目中定义一个版本,需要在Gemfile文件中进行定义

gem 'rake', '0.8.7'

然后运行

bundle update rake
您的项目版本现在与Gemfile中指定的版本相同,警告消息已经消失了。

3
我没有多个版本的rake。 - mcr

4
除了修改Gemfile并运行'bundle update rake'之外,我还需要为我运行以下命令:
gem uninstall rake -v 0.9.2.2
gem uninstall rake -v 0.9.2
gem install rake -v 0.8.7

3

在一些不需要调用整个Rails框架的项目中,将rdoc添加到Gemfile中是我成功的关键:

group :development, :test do
  gem 'rake', '~> 0.9.2.2'
  gem "rdoc", '~> 3.12'
end

更新:这个问题仍然困扰着我的rails 3.0.x项目。Rakefile和gems都看起来没问题,但我仍然遇到了这个问题。为了确定警告是从哪里发出的,我在gems/rake-0.9.2.2/lib/rake/rdoctask.rb中设置了一个canary:

if Rake.application
  begin
    raise 'where am i'                                                                
  rescue                                                                       
    puts $@                                                                    
  end 
  Rake.application.deprecate('require \'rake/rdoctask\'', 'require \'rdoc/task\' (in RDoc 2.4.2+)', __FILE__)
end

这立即指向了rails堆栈本身的问题。快速检查后发现,rails 3.0.8充斥着对rake/rdoctask的引用。更新到rails(我相信是3.0.9或更高版本)可以解决这个问题(或者像其他人建议的那样降级rake)。但是,如果你被困在 ~ 3.0.8上并且不想降级rake,你可以在你的Rakefile中设置ignore_deprecate来抑制警告。
require File.expand_path('../config/application', __FILE__)
require 'rake'
require 'rake/testtask'
require 'rdoc/task'

# add this (and perhaps make it conditional on Rails.version if you like):
Rake.application.options.ignore_deprecate = true

Babylon::Application.load_tasks

为什么要抑制警告?我的主要动机是确保调用rake的cron作业不记录和发送虚假输出。


是的,它也回来困扰我了。RDoc技巧可以解决一个原因,但还有其他问题... - tardate
现在我很高兴:得到了一个可行的解决方案。(相应地更新我的答案) - tardate

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接