#ruby-on-rails #rake #warnings #deprecated
#ruby-on-rails #грабли #предупреждения #устарело
Вопрос:
Я обновил пакет, теперь у меня все еще есть устаревшее предупреждение rake / rdoctask после выполнения команды rake.
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 в порядке.
Я понятия не имею, как решить эту проблему. Какие-нибудь советы? Большое спасибо.
Мартин
Комментарии:
1. Я все еще борюсь с этой проблемой в ряде проектов. Со всеми очевидными вещами, о которых позаботились (rdoc и т. Д.), Это все еще беспокоит меня. Я сильно подозреваю, что в проекте есть некоторые драгоценные камни.. но отслеживание проблемы является проблемой. Кто-нибудь знает, как заставить ruby / rake сообщать точное местоположение кода того, что вызвало ПРЕДУПРЕЖДЕНИЕ?
Ответ №1:
В вашей системе может быть несколько версий rake, и вы можете просмотреть их, выполнив
$ gem list
=> rake
(0.9.2.2, 0.9.2, 0.8.7)
Чтобы определить версию в моем проекте, определите ее в файле Gemfile как
gem 'rake', '0.8.7'
затем запустите
bundle update rake
Теперь ваша версия проекта соответствует указанной в файле Gemfile, и ваше ПРЕДУПРЕЖДЕНИЕ исчезло.
Комментарии:
1. У меня нет нескольких версий rake.
Ответ №2:
В дополнение к изменению 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:
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, вы можете подавить предупреждение, установив ignore_deprecate в вашем Rakefile:
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
Зачем подавлять предупреждение? Моей главной мотивацией было убедиться, что задания cron, которые вызывают rake, не регистрируют и не отправляют ложные выходные данные по электронной почте.
Комментарии:
1. да, это тоже вернулось ко мне. Трюк с rdoc устраняет одну причину, но есть и другие…
2. хорошо, теперь я счастлив: есть решение, которое работает. (соответствующим образом обновляю свой ответ)