Как исправить предупреждение о недавнем устаревании Rubygems? - PullRequest
17 голосов
/ 10 мая 2011

Я недавно запустил обновления:

gem update --system
gem update

Теперь я получаю множество предупреждений об устаревании каждый раз, когда загружаю драгоценный камень. Например, 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?

Ответы [ 11 ]

15 голосов
/ 10 мая 2011

Мне пришлось понизить до 1.6.2.Эти уведомления абсолютно нелепы.Они делают последнюю версию совершенно непригодной для использования.Должен быть способ отключить их, но до тех пор:

sudo gem update --system 1.6.2

14 голосов
/ 13 мая 2011

см. Здесь 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

8 голосов
/ 21 мая 2011

Вы также можете использовать более специфичный для RVM rvm rubygems current, чтобы вернуться к более безопасной версии гема (1.6.2 прямо сейчас).

4 голосов
/ 19 мая 2011

Я взял ответы других людей и написал для них что-то более трудное для меня.Мне все еще пришлось удалить пару вручную из /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
1 голос
/ 13 марта 2012

Упрощенно: Добавьте следующее к environment.rb

ActiveSupport::Deprecation.silenced = true
1 голос
/ 31 июля 2011

Запустите эту команду sudo gem pristine --all --no-extensions

, чтобы удалить все эти предупреждающие сообщения.

1 голос
/ 31 мая 2011

Установка rubygems версии 1.8.4 избавляет от предупреждений об устаревании спецификации gem:

$ gem update --system

=== 1.8.4 / 2011-05-25

  • 1 незначительное улучшение:

    • Удалены устаревшие default_executable из спецификации.
0 голосов
/ 05 ноября 2013

Предпочтительный раствор

Используйте это, любезно предоставлено Гмарик Гист :

.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 игнорирует его при запуске модульных тестов
  • вы не можете обновиться до последних Rubygems из-за некоторых старых, не поддерживаемых гемов в Gemfile

Изменить rubygems/deprecate.rb:

def self.skip # :nodoc:
  @skip ||= true
end
0 голосов
/ 14 декабря 2011

SlimGems также может быть решением.

0 голосов
/ 29 сентября 2011

Я могу подтвердить, что 1.8.10 убрал эти предупреждения об устаревании и в среде Rails 3.1.

Просто запустите

gem update --system
...