22
votes

I have recently run updates:

gem update --system
gem update

Now, I come with a lot of deprecation warnings each time I load a gem. For example, 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

I use RVM, Ruby 1.9.2 and Rubygems 1.8.1. Any way to get around this problem? Revert to an older version of rubygems?

13
You need to provide more information, what does your Gemfile look like?iceydee

13 Answers

21
votes

I had to downgrade to 1.6.2. Those notices are absolutely ridiculous. They make the latest version completely unusable. There should really be a way to disable them, but until then:

sudo gem update --system 1.6.2

19
votes

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

for short, run

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`}"

if the backtick (or backquote) doesn't work for you, as @jari-jokinen has pointed out (thank you!) in some cases, replace the second line with this

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)}"

Note: If your using Bundler in a production environment your offending gems will have been cached to shared/bundle so you'll need to run these commands using bundle exec

8
votes

You can also use the more RVM specific rvm rubygems current to get back to a safer version of gem (1.6.2 right now).

5
votes

I took other peoples' answers and scriptified them into something a little more worky for me. I still had to delete a couple by hand out of /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
votes

I can confirm that 1.8.10 has removed these deprecation warnings in a Rails 3.1 environment as well.

Simply run

gem update --system
3
votes

Installing rubygems version 1.8.4 gets rid of the gem spec deprecation warnings:

$ gem update --system

=== 1.8.4 / 2011-05-25

  • 1 minor enhancement:

    • Removed default_executable deprecations from Specification.
1
votes

Run this command sudo gem pristine --all --no-extensions

to remove all those warning messages.

1
votes

Simpler: Add the following to environment.rb

ActiveSupport::Deprecation.silenced = true
1
votes

Preferred solution

Use this, a courtesy of 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

Fall-back solution

Use it when:

  • you use RVM and keep gems in ~
  • you can't use $RUBYLIB because your IDE ignores it when running unit tests
  • you can't upgrade to the latest Rubygems because of some old, unmaintained gems in Gemfile

Modify rubygems/deprecate.rb:

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

I tried all the above options but nothing worked.

Finally, I uninstalled Ruby and all dependencies, installed RVM using the link https://rvm.io/rvm/install, and reinstalled Ruby using rvm install ruby.

Things started working fine!

0
votes

It looks like you're ok, It is just a warning where rake-0.8.7.gemspec will not meet new standard of RubyGems.

I'm sure rake's creator will get this sync.

0
votes

Found that it was coming from Gem::Version.correct?(nil) so grep for that

-1
votes

SlimGems might be a solution as well.