如何修复Rubygems最近的弃用警告?

时间:2011-05-10 11:47:07

标签: ruby rubygems rvm suppress-warnings

我最近运行了更新:

gem update --system
gem update

现在,每次加载gem时,我都会收到很多弃用警告。例如,rails console

NOTE: Gem::Specification#default_executable= is deprecated with no replacement. It will be removed on or after 2011-10-01.
Gem::Specification#default_executable= called from /Users/user/.rvm/gems/ruby-1.9.2-p180@global/specifications/rake-0.8.7.gemspec:10.
NOTE: Gem::Specification#default_executable= is deprecated with no replacement. It will be removed on or after 2011-10-01.
Gem::Specification#default_executable= called from /Users/user/.rvm/gems/ruby-1.9.2-p180@global/specifications/rake-0.8.7.gemspec:10.
NOTE: Gem::Specification#default_executable= is deprecated with no replacement. It will be removed on or after 2011-10-01.
Gem::Specification#default_executable= called from /Users/user/.rvm/gems/ruby-1.9.2p180@global/specifications/rake-0.8.7.gemspec:10.
Loading development environment (Rails 3.0.7)
ruby-1.9.2-p180 :001 > exit

我使用RVM,Ruby 1.9.2和Rubygems 1.8.1。有什么方法可以解决这个问题吗?还原到旧版本的rubygems?

12 个答案:

答案 0 :(得分:15)

我不得不降级到1.6.2。那些通知绝对是荒谬的。他们使最新版本完全无法使用。应该有一种方法可以禁用它们,但在那之前:

sudo gem update --system 1.6.2

答案 1 :(得分:14)

http://ryenus.tumblr.com/post/5450167670/eliminate-rubygems-deprecation-warnings

简而言之,运行

gem pristine --all --no-extensions

ruby -e "`gem -v 2>&1 | grep called | sed -r -e 's#^.*specifications/##' -e 's/-[0-9].*$//'`.split.each {|x| `gem pristine #{x} -- --build-arg`}"

如果反引号(或反引号)对你不起作用,正如@ jari-jokinen指出的那样(谢谢!)在某些情况下,用这个替换第二行

ruby -e "%x(gem -v 2>&1 | grep called | sed -r -e 's#^.*specifications/##' -e 's/-[0-9].*$//').split.each {|x| %x(gem pristine #{x} -- --build-arg)}"

注意:如果您在生产环境中使用Bundler,您的违规宝石将被缓存到shared / bundle,因此您需要使用bundle exec运行这些命令

答案 2 :(得分:8)

您还可以使用更多特定于RVM的rvm rubygems current来恢复更安全的gem版本(1.6.2)。

答案 3 :(得分:4)

我接受了其他人的回答,并将它们写成了一些对我来说更有用的东西。我仍然需要从/ usr / local / cellar手动删除一对夫妇。

#!/usr/bin/env bash
#

brew install gnu-sed
sudo gem pristine --all --no-extensions
gems=$(gem -v 2>&1 | grep called | gsed -r -e 's#^.*specifications/##' -e 's/-[0-9].*$//')

for gem in $gems
do
  echo Fixing $gem...
  sudo gem pristine $gem -- -build-arg
done

答案 4 :(得分:1)

安装rubygems版本1.8.4摆脱了gem规范弃用警告:

$ gem update --system

=== 1.8.4 / 2011-05-25

  • 1次小改进:

    • 从规范中删除了default_executable弃用。

答案 5 :(得分:1)

运行此命令 sudo gem pristine --all --no-extensions

删除所有这些警告信息。

答案 6 :(得分:1)

更简单:将以下内容添加到environment.rb

ActiveSupport::Deprecation.silenced = true

答案 7 :(得分:1)

我尝试了上述所有选项,但无济于事。

最后,我卸载了Ruby和所有依赖项,并使用链接https://rvm.io/rvm/install安装了RVM, 并使用rvm install ruby重新安装了Ruby。

一切正常!

答案 8 :(得分:0)

看起来你没问题,只是警告 rake-0.8.7.gemspec 不符合RubyGems的新标准。

我确信rake的创建者会得到同步。

答案 9 :(得分:0)

我可以确认1.8.10已经在Rails 3.1环境中删除了这些弃用警告。

简单地运行

gem update --system

答案 10 :(得分:0)

SlimGems也可能是一个解决方案。

答案 11 :(得分:0)

首选解决方案

使用此项,由gmarik's gist提供:

.bashrc:

if [ -d "$HOME/.ruby/lib/" ]; then
  RUBYLIB="$RUBYLIB:$HOME/.ruby/lib"
  RUBYOPT="-rno_deprecation_warnings_kthxbye"
  export RUBYLIB RUBYOPT
fi

~/.ruby/lib/no_deprecation_warnings_kthxbye.rb

begin
require 'rubygems'
Gem::Deprecate.skip = true if defined?(Gem::Deprecate)
rescue LoadError => e
  p e
end

后退解决方案

在以下情况下使用它:

  • 您使用RVM并将宝石保存在〜
  • 您无法使用$RUBYLIB,因为您的IDE在运行单元测试时会忽略它
  • 由于Gemfile中一些旧的,未维护的宝石,你无法升级到最新的Rubygems

修改rubygems/deprecate.rb

def self.skip # :nodoc:
  @skip ||= true
end