错误:'rake / rdoctask'已过时且不再受支持。使用'rdoc / task'(在RDoc 2.4.2+中可用)代替

时间:2013-01-02 05:10:16

标签: ruby-on-rails ruby-on-rails-3.2

似乎这个问题的最后一篇文章因某种原因被关闭了所以我会试试运气......

我正在尝试运行一个简单的“rake db:migrate”命令。当我这样做时,我在标题中得到错误。是的,解决方案“显得”显而易见但不是因为我的Rakefile不包含任何对'rake / rdoctask'的引用。它似乎来自documentation.rake但是当我尝试按照错误的建议更改该文件时,我得到了一个不同的错误。我发现有几个帖子宣称这是一个已知问题,但我发现的任何内容都没有说明如何修复或解决这个问题。

有没有人有任何想法如何解决它?下面是rake命令的输出,带有--trace:

$ rake --trace db:migrate
rake aborted!
ERROR: 'rake/rdoctask' is obsolete and no longer supported. Use 'rdoc/task' (available in RDoc 2.4.2+) instead.
    C:/Programs/Ruby193/lib/ruby/gems/1.9.1/gems/rake-10.0.3/lib/rake/rdoctask.rb:1:in `<top (required)>'
    C:/Programs/Ruby193/lib/ruby/gems/1.9.1/gems/railties-3.0.3/lib/rails/tasks/documentation.rake:2:in `require'
    C:/Programs/Ruby193/lib/ruby/gems/1.9.1/gems/railties-3.0.3/lib/rails/tasks/documentation.rake:2:in `<top (required)>'
    C:/Programs/Ruby193/lib/ruby/gems/1.9.1/gems/railties-3.0.3/lib/rails/tasks.rb:15:in `load'
    C:/Programs/Ruby193/lib/ruby/gems/1.9.1/gems/railties-3.0.3/lib/rails/tasks.rb:15:in `block in <top (required)>'
    C:/Programs/Ruby193/lib/ruby/gems/1.9.1/gems/railties-3.0.3/lib/rails/tasks.rb:6:in `each'
    C:/Programs/Ruby193/lib/ruby/gems/1.9.1/gems/railties-3.0.3/lib/rails/tasks.rb:6:in `<top (required)>'
    C:/Programs/Ruby193/lib/ruby/gems/1.9.1/gems/railties-3.0.3/lib/rails/application.rb:213:in `require'
    C:/Programs/Ruby193/lib/ruby/gems/1.9.1/gems/railties-3.0.3/lib/rails/application.rb:213:in `initialize_tasks'
    C:/Programs/Ruby193/lib/ruby/gems/1.9.1/gems/railties-3.0.3/lib/rails/application.rb:139:in `load_tasks'
    C:/Programs/Ruby193/lib/ruby/gems/1.9.1/gems/railties-3.0.3/lib/rails/application.rb:77:in `method_missing'
    C:/developer/skknobara/Rakefile:7:in `<top (required)>'
    C:/Programs/Ruby193/lib/ruby/gems/1.9.1/gems/rake-10.0.3/lib/rake/rake_module.rb:25:in `load'
    C:/Programs/Ruby193/lib/ruby/gems/1.9.1/gems/rake-10.0.3/lib/rake/rake_module.rb:25:in `load_rakefile'
    C:/Programs/Ruby193/lib/ruby/gems/1.9.1/gems/rake-10.0.3/lib/rake/application.rb:583:in `raw_load_rakefile'
    C:/Programs/Ruby193/lib/ruby/gems/1.9.1/gems/rake-10.0.3/lib/rake/application.rb:89:in `block in load_rakefile'
    C:/Programs/Ruby193/lib/ruby/gems/1.9.1/gems/rake-10.0.3/lib/rake/application.rb:160:in `standard_exception_handling'
    C:/Programs/Ruby193/lib/ruby/gems/1.9.1/gems/rake-10.0.3/lib/rake/application.rb:88:in `load_rakefile'
    C:/Programs/Ruby193/lib/ruby/gems/1.9.1/gems/rake-10.0.3/lib/rake/application.rb:72:in `block in run'
    C:/Programs/Ruby193/lib/ruby/gems/1.9.1/gems/rake-10.0.3/lib/rake/application.rb:160:in `standard_exception_handling'
    C:/Programs/Ruby193/lib/ruby/gems/1.9.1/gems/rake-10.0.3/lib/rake/application.rb:70:in `run'
    C:/Programs/Ruby193/lib/ruby/gems/1.9.1/gems/rake-10.0.3/bin/rake:33:in `<top (required)>'
    C:/Programs/Ruby193/bin/rake:23:in `load'
    C:/Programs/Ruby193/bin/rake:23:in `<main>'

我发现我的Gemfile中有rails 3.0.3所以我将其更改为3.2.9,但现在当我运行rake db:migrate时我得到:

rake aborted!
Bundler could not find compatible versions for gem "rack":
  In Gemfile:
    rails (= 3.2.9) x86-mingw32 depends on
      rack (~> 1.4.0) x86-mingw32

    rack (1.2.5)

我不确定错误意味着什么,但“gem list rack”显示我安装了1.4.1和1.4.0。我的Gemfile非常简单:

gem 'rails', '3.2.9'
gem 'rack','< 1.4.1'
gem 'mysql2', '< 0.3'

有什么想法吗?

10 个答案:

答案 0 :(得分:62)

我在使用rails 2.3.5时遇到了类似的问题,因此我在编辑Rakefile的跟踪消息中指示需要'rdoc / task'而不是rake / rdoctask并安装了rdoc gem。

如果您使用的是rake版本&gt; 10.0.0。请编辑你的Rakefile

从:

require 'rake'
require 'rake/testtask'
require 'rake/rdoctask'
require 'tasks/rails'

为:

require 'rake'
require 'rake/testtask'
require 'rdoc/task'
require 'tasks/rails'

如果您不想编辑Rakefile,可以像这样切换回旧版本的

gem uninstall rake -v 10.0.3
gem install rake -v 0.8.7

答案 1 :(得分:22)

将我的旧应用迁移到rails 2.3.15时遇到了类似的问题。我通过安装旧版本的rake并卸载当前的10.0.3版本来解决它:

gem install rake --version 0.8.7
gem uninstall rake --version 10.0.3

答案 2 :(得分:7)

我把它放到了工作

gem'rake','0.9.2.2'

在我的Gemfile中,然后以

运行rake
bundle exec rake db:migrate

答案 3 :(得分:6)

我不得不解决这个问题而不打破那些有旧rake但没有安装rdoc的地方。我添加了一个开始......救援条款:

begin
  require 'rake/rdoctask'
rescue
  require 'rdoc/task'
end

答案 4 :(得分:6)

我遇到了同样的问题......我做了上面提到的 GiridharBandi

require 'rake'
require 'rake/testtask'
require 'rake/rdoctask'
require 'tasks/rails'

为:

require 'rake'
require 'rake/testtask'
require 'rdoc/task'
require 'tasks/rails'

Rake版本10.0.4在gem列表中,但是当我尝试卸载时,它说没有安装rake。所以我忽略了这一点并继续安装rake 0.8.7。一旦安装完毕,我安装了rdoc

gem install rdoc

<= 1.8.6 : unsupported
 = 1.8.7 : gem install rdoc-data; rdoc-data --install
 = 1.9.1 : gem install rdoc-data; rdoc-data --install
>= 1.9.2 : nothing to do! Yay!

然后一切都开始正常工作了。

对于rails 3.0.6,具有相同类型的错误:

ERROR: 'rake/rdoctask' is obsolete and no longer supported. Use 'rdoc/task' (available in RDoc 2.4.2+) instead.

我安装了rake 0.9.2和rdoc。注释掉#require'tasks / rails'然后一切都开始工作了。我认为rake问题在rails中解决了&gt; 3.2.9。

答案 5 :(得分:2)

我最近遇到了类似的问题。

看起来与Can't run any rake command: "ERROR: 'rake/rdoctask' is obsolete and no longer supported"

相同的问题

我通过升级到Rails 3.2.9来解决它。

答案 6 :(得分:1)

这可能不是正确的方法,但我进入了我的Gemfile.lock文件并将我的rake版本从10.0.3改回到0.8.7。我现在正在运行Rails 3.0.5,并在恢复之前简要更新到3.0.19。我相信更新了一些宝石,并且还使得Rails宝石正在寻找大于或等于0.8.7的最新版本:

rails (3.0.5)
  actionmailer (= 3.0.5)
  actionpack (= 3.0.5)
  activerecord (= 3.0.5)
  activeresource (= 3.0.5)
  activesupport (= 3.0.5)
  bundler (~> 1.0)
  railties (= 3.0.5)
railties (3.0.5)
  actionpack (= 3.0.5)
  activesupport (= 3.0.5)
  rake (>= 0.8.7)
  thor (~> 0.14.4)
rake (0.8.7)

我也卸载了10.0.3:

gem uninstall rake --version 10.0.3

之后,一切都恢复正常运行。

如果我没有回滚rails 3.0.19,那么我会继续使用rake 10.0.3。

希望这有助于某人!

答案 7 :(得分:1)

与原始海报一样,我没有rake / rdoctask的要求。 升级导轨不是一种选择。答案是在你的Gemfile中保持你的佣金为0.9.2.2。

答案 8 :(得分:1)

每当我有一个基于Bundler的项目并且我使用的是Ruby 1.9时,我会遇到这种情况。 2 。最后我发现Bundler没有管理rdoc gem,我要解决的问题是在Gemfile中包含rdoc(如果Gemfile已配置为使用它,则包含gemspec)并运行bundle install

我似乎永远不会遇到1.9.3或2.0.0,只有1.9.2。

答案 9 :(得分:1)

天啊,我差不多几个小时都在想这个,最后这是我的情况(可能会帮助别人:)): 我安装了多个rails版本 所以我只是卸载了最新的一个,因为我想使用最前卫的(现在是4.0.1)

所以:

$ gem uninstall rails

我得到了这个:

Select gem to uninstall:
 1. rails-0.9.5
 2. rails-4.0.0
 3. rails-4.0.1
 4. All versions
>

所以我选择了前两个,就是这样:) 现在一切都好 希望这可以帮助那些神秘地困住我的人:(