我最近运行了更新:
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?
答案 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次小改进:
答案 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
在以下情况下使用它:
$RUBYLIB
,因为您的IDE在运行单元测试时会忽略它修改rubygems/deprecate.rb
:
def self.skip # :nodoc:
@skip ||= true
end