【问题标题】:How to detect what causes a deprecation warning in Rake如何检测导致 Rake 中的弃用警告的原因
【发布时间】:2016-06-28 21:04:18
【问题描述】:

当我执行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:

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 删除了弃用通知。

标签: ruby-on-rails ruby debugging rake


【解决方案1】:

尝试更新gem "rspec-rails", "~> 3.4.4",它为我解决了弃用警告。

【讨论】:

  • rspec-core 3.4.2 仍然对我有这个警告。更新到 3.4.4 解决了它。见github.com/rspec/rspec-core/issues/2210
  • Gemfile:gem 'rspec-rails', '~> 3.4.2',控制台:$ bundle update rspec rspec-rails
【解决方案2】:

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

对我来说,有问题的宝石是 rspec (fixed in 3.4.4) 和 rubocop (fixed in 0.38.0)。

【讨论】:

  • 我已经在 task_manger.rb 中将警告改为 raise,但我仍然无法使用 rake (db:migrate)。我还注意到我的 gems 目录中有多个 rake 版本,我应该删除更新的版本吗?
  • 将 rspec-core 更新到 3.4.4 & rspec-rails 到 3.4.2 解决了它。
【解决方案3】:

你可以递归地 grep你的gem,使用:

grep -r last_comment /path/to/gems

【讨论】:

  • grep -r last_commentgrep: warning: recursive search of stdin
  • 对不起。我已经更新了我的答案。 /path/to/gems 取决于您的安装。
  • 如果您有多个项目,那么/path/to/gems 不会包含您所有项目的gem 吗?
  • 如果有帮助,下面会打印当前项目的所有 grep 路径:for gem in $(bundle list | awk '{print $2}'); do bundle show "$gem"; done
【解决方案4】:

不是rspec fault,错误来自rake,几周前有一个commit添加了警告,还有后续here

似乎 Rspec 已经遵守使用last_description 而不是last_comment。如果可能,请尝试更新到 rspec-core Gem 的较新版本,就像 @chris-scott 建议的那样。我跑来做这个把戏

bundle update rspec-core

【讨论】:

    【解决方案5】:

    正如post 中所述,您可以这样做:

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

    这将为您提供弃用的完整堆栈跟踪。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-31
      • 1970-01-01
      • 1970-01-01
      • 2016-09-24
      • 2022-10-26
      相关资源
      最近更新 更多