2014-01-17 3 views
32

Я получаю это предупреждение всякий раз, когда я запускаю свои тесты или запускаю сервер рельсов.Ruby - Digest :: Дайджест устарел; Использовать дайджест

Когда я бегу Grep из .rvm папки я вижу следующее:

grep -R 'Digest::Digest' . 
./rubies/ruby-2.1.0/lib/ruby/2.1.0/openssl/digest.rb: warn('Digest::Digest is deprecated; Use Digest') 
- additional references to openssl and ruby 2.1.0 

Так что, похоже, что это Руби 2.1.0 ошибка. Есть ли какие-либо исправления? Насколько я могу судить, пока нет патчей.

Хотя мое приложение использует Fog и кучу других драгоценных камней, которые имеют проблемы, связанные с этим сообщением, я использую исправленные версии, которые не имеют ошибки. Поэтому я считаю, что Руби здесь виноват.

ответ

46

Заимствуя ответ от this thread

OpenSSL :: Digest :: Дайджест обескуражен использовать от very ancient era such as Ruby 1.8 и, наконец, was deprecated recently.

Если вы ищете сообщение об ошибке, вы увидите, что много драгоценных камней, including fog, все еще использовали устаревший синтаксис.

Я предполагаю, что потребуется некоторое время, прежде чем все драгоценные камни будут обновлены. Если вы столкнулись с устаревшим в одном из используемых вами libs, я рекомендую вам сообщить об этом сопровождающему.

Вот несколько примеров

Это, скорее всего, ваше приложение Rails зависит драгоценный камень, который использует этот старый синтаксис.

+0

Спасибо, я сообщу об этом и дождусь его исчезновения. – stephenmurdoch

+2

s3_direct_upload - это еще один камень с этим предупреждением об устаревании: https://github.com/waynehoover/s3_direct_upload/issues/148 – nathany

+0

Шахта происходила из драгоценного камня asset_sync, у которого была старая версия тумана как зависимость. обновление пакета asset_sync исправил его для меня. – Smickie

2

OpenSSL::Digest Использование вместо устаревшей OpenSSL::Digest::Digest

+0

спасибо за альтернативное предложение. – Swaps

19

Если вы используете Bundler, хороший способ, чтобы выяснить, что является причиной этой проблемы является Grep через все драгоценные камни, определенных в Gemfile:

# grep (ack or ag) the problem code 
bundle show --paths | xargs grep -r Digest::Digest        

# here was my output 
~/.gem/ruby/2.1.0/gems/fog-1.15.0/lib/fog/cloudstack.rb: @@digest = OpenSSL::Digest::Digest.new('sha1') 
~/.gem/ruby/2.1.0/gems/fog-1.15.0/lib/fog/core/hmac.rb:  @digest = OpenSSL::Digest::Digest.new('sha1') 
~/.gem/ruby/2.1.0/gems/fog-1.15.0/lib/fog/core/hmac.rb:  @digest = OpenSSL::Digest::Digest.new('sha256') 

# update appropriate gems (in my case fog) 
gem install fog 
bundle update fog 

Также убедитесь, что вы не заблокированы в версии Gem в Gemfile.

# change 
gem 'fog', '~> 1.15.0' 
# to 
gem 'fog', '~> 1.0' 
# or omit the version if you are a cowboy/girl 
+2

спасибо за совет grep! <3 OSS –

+0

Пробовал этот трюк как локально, так и на dev, и grep вернулся пустым. – gitb

+0

@gitb Попробуйте grep просто часть имени, как просто 'Digest'. Может быть, они разделились по линиям. Кроме того, это либо в вашем коде (так что grep ваш код проекта), либо я понятия не имею :) – mraaroncruz

Смежные вопросы