如何检测Rake中引起弃用警告的原因

44

当我执行bundle exec rake -T(或bundle exec rake)时,我收到了弃用警告:

Andrews-Air:nabu agrimm$ bundle exec rake --trace -T
[DEPRECATION] `last_comment` is deprecated.  Please use `last_description` instead.
[DEPRECATION] `last_comment` is deprecated.  Please use `last_description` instead.
[DEPRECATION] `last_comment` is deprecated.  Please use `last_description` instead.
[DEPRECATION] `last_comment` is deprecated.  Please use `last_description` instead.
[DEPRECATION] `last_comment` is deprecated.  Please use `last_description` instead.
[DEPRECATION] `last_comment` is deprecated.  Please use `last_description` instead.
[DEPRECATION] `last_comment` is deprecated.  Please use `last_description` instead.
[DEPRECATION] `last_comment` is deprecated.  Please use `last_description` instead.
[DEPRECATION] `last_comment` is deprecated.  Please use `last_description` instead.
[DEPRECATION] `last_comment` is deprecated.  Please use `last_description` instead.
rake about                               # List versions of all Rails frameworks and the environment
[snip]

尽管这与主题无关,但以下是 Gemfile 的内容:

虽然不相关,但这是Gemfile:

source 'https://rubygems.org'

gem 'rails', '~> 3.2.22.2'

gem 'mysql2'

group :assets do
  gem 'coffee-rails', '~> 3.2.1'
  gem 'compass-rails'

  gem 'therubyracer'
  gem 'libv8'

  gem 'uglifier', '>= 1.0.3'
end

gem 'jquery-rails'
gem 'haml-rails'
gem 'to-csv', :require => 'to_csv'
gem 'kaminari'
gem 'oai'
gem 'analytical'

gem 'country-select'
gem 'activeadmin'
gem 'sass-rails',  '~> 3.2.3'
gem 'meta_search', '>= 1.1.0.pre'

gem 'devise', '2.2.3'
gem 'cancancan', '~> 1.12.0'

gem 'squeel'
gem 'nilify_blanks'

gem 'sunspot_rails'
gem 'sunspot_solr'

gem 'unicorn'

gem 'ruby-filemagic'

gem 'capistrano'
gem 'capistrano-ext'
gem 'capistrano-unicorn'

gem 'rollbar', '~> 2.8.3'
gem 'newrelic_rpm'

gem 'progress_bar'
gem 'paper_trail', '~> 2'
gem 'quiet_assets'
gem 'roo', '~> 2.1.0'
gem 'roo-xls', :github => 'roo-rb/roo-xls', :ref => '0a5ef88'
gem 'streamio-ffmpeg'
gem 'rake'

gem 'rmagick'

gem 'whenever', :require => false

group :development, :test do
  gem 'turn', '~> 0.8.3', :require => false
  gem 'rspec-rails', '~> 2.0'
  gem 'sextant'
  gem 'thin'

  gem 'spring'
  gem 'spring-commands-rspec'

  gem 'pry'
  gem 'pry-rails'

  gem 'letter_opener'

  gem 'guard-bundler'
  gem 'guard-rails'
  gem 'guard-rspec'
  gem 'guard-sunspot'

  gem 'rb-inotify', :require => RUBY_PLATFORM.include?('linux') ? 'rb-inotify' : false
  gem 'rb-fsevent', :require => RUBY_PLATFORM.include?('darwin') ? 'rb-fsevent' : false
end

group :development do
  gem 'annotate'
  gem 'binding_of_caller'
  gem 'better_errors'
  gem 'rubocop'
end

group :test do
  gem 'capybara'
  gem 'poltergeist'
  gem 'factory_girl_rails'
  gem 'database_cleaner'
  gem 'email_spec'
  gem 'launchy'
end

执行 git grep -i last_comment 命令后发现它不在我的代码中,可能是在第三方 gem 中。

我该如何确定导致这些弃用警告的原因?


作为一种解决方法,要求 rake 的版本早于 11.0 可以消除这个废弃通知。 - Andrew Grimm
5个回答

28

尝试更新 gem "rspec-rails", "~> 3.4.4",这对我解决了废弃警告。


2
rspec-core 3.4.2 对我仍然有此警告。更新到3.4.4解决了这个问题。请参见https://github.com/rspec/rspec-core/issues/2210。 - jwadsack
5
Gemfile: gem 'rspec-rails', '~> 3.4.2', 控制台:$ bundle update rspec rspec-rails - blackchestnut

25

我发现将 rake-11.1.0/lib/rake/task_manager.rb:10 中的代码行从 warn 修改为 raise 更容易一些。

对我来说,有问题的宝石是 rspec(已在 3.4.4中修复)和rubocop(已在0.38.0中修复)。


我已经在task_manager.rb中将“warn”更改为“raise”,但我仍然无法使用rake(db:migrate)。我还注意到我在gems目录中有多个rake版本,我应该删除更新的版本吗? - Alan Kis
7
将 rspec-core 升级到 3.4.4 和 rspec-rails 升级到 3.4.2 可以解决这个问题。 - Richard_G

5

此帖子所述,您可以执行以下操作:

# application.rb
ActiveSupport::Deprecation.debug = true

这将为您提供完整的退化堆栈跟踪。


5
这段文字的翻译如下:

这不是rspec的问题,错误来自于rake。几周前进行了一项提交,添加了警告,这里有一个后续链接

看起来Rspec已经在使用last_description而非last_comment。如果可能,请尝试更新到新版本的rspec-core宝石库,就像@chris-scott建议的那样。我运行命令进行更新:

bundle update rspec-core


5

您可以使用以下命令递归搜索您的宝石:

grep -r last_comment /path/to/gems

执行 grep -r last_comment 命令会出现 grep: warning: recursive search of stdin 警告。 - Andrew Grimm
抱歉,我已更新了我的答案。/path/to/gems 取决于您的安装。 - stefan0xC
如果您有多个项目,那么/path/to/gems不就包括了所有项目的gem吗? - Andrew Grimm
1
如果有帮助的话,以下命令会打印出当前项目中用于grep的所有路径:for gem in $(bundle list | awk '{print $2}'); do bundle show "$gem"; done - Matt

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