Подтвердить что ты не робот

Как я могу исправить недавнее предупреждение об отказе от Rubygems?

Недавно я обновил обновления:

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/[email protected]/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/[email protected]/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/[email protected]/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?

4b9b3361

Ответ 1

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

sudo gem update --system 1.6.2

Ответ 2

см. здесь 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`}"

если backtick (или backquote) не работает для вас, поскольку в некоторых случаях @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 в производственной среде, ваши оскорбительные камни будут кэшированы для совместного использования/комплекта, поэтому вам нужно будет запускать эти команды с помощью пакета exec

Ответ 3

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

Ответ 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

Ответ 5

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

$gem update --system

=== 1.8.4/2011-05-25

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

    • Удалены дефолты default_executable из спецификации.

Ответ 6

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

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

Ответ 7

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

ActiveSupport::Deprecation.silenced = true

Ответ 8

Похоже, вы в порядке. Это просто предупреждение, в котором rake-0.8.7.gemspec не будет соответствовать новому стандарту RubyGems.

Я уверен, что создатель rake получит эту синхронизацию.

Ответ 9

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

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

gem update --system

Ответ 10

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

Ответ 11

Предпочтительное решение

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

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

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