Digest::Digest устарел; используйте Digest

#ruby-on-rails #ruby-on-rails-4 #fog

#ruby-на-рельсах #ruby-on-rails-4 #туман

Вопрос:

Я получаю следующую ошибку

 Digest::Digest is deprecated; use Digest
 

когда я пытаюсь загрузить свой rails-сервер. Я попытался найти свой исходный код Digest::Digest , но я нигде его не использую. есть какие-нибудь идеи, как это решить?

Единственное место, которое я использую, это

 <% digest = OpenSSL::Digest.new('sha1') %>

@alias = Digest::MD5.hexdigest(phone)
 

Комментарии:

1. @AndreyDeineko не могли бы вы поделиться ссылкой? это так — rubygems.org/gems/ackr/versions/0.2.4

2. добавлено еще несколько опций 🙂

Ответ №1:

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

установите (если он еще не установлен) инструмент подтверждения и выполните следующую команду:

 # of course, the path to your gems will be different
ack Digest::Digest /Users/username/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.1/gems/
 

Он покажет вам, использует ли его какой-либо из драгоценных камней, и если да — покажет вам строки исходного кода.

Но в принципе вы мало что можете сделать:

  1. Проверьте, есть ли у этого драгоценного камня более новая версия, которая устраняет предупреждение об устаревании
  2. Напишите патч для драгоценного камня, который устраняет предупреждение и использует исправленные версии (не крутая идея, IMO)
  3. Живите с предупреждением, пока сопровождающие gem не поработают над этим
  4. Вы можете полностью отключить предупреждения об амортизации с ActiveSupport::Deprecation.silenced = true помощью (тоже не очень крутая идея, IMO). Существует также способ отключить конкретное предупреждение, как @max говорит в комментариях):
     silenced = [
      /Digest::Digest is deprecated; use Digest/,
      /some other warning/,
    ]
    
    silenced_expr = Regexp.new(silenced.join('|'))
    
    ActiveSupport::Deprecation.behavior = lambda do |msg, stack|
      unless msg =~ silenced_expr
        ActiveSupport::Deprecation::DEFAULT_BEHAVIORS[:stderr].call(msg, stack)
      end
    end
     
  5. Не используйте этот драгоценный камень

Комментарии:

1. и я использую последние версии: (

2. @HarshaMV тогда, как я уже сказал, вы либо ждете, пока разработчики gem обновят его, либо работаете с предупреждающим сообщением..

3. @HarshaMV никаких проблем 🙂

4. Вы можете отключить уведомления об амортизации с ActiveSupport::Deprecation.silenced = true помощью или с помощью ActiveSupport::Deprecation.silenced do; end .

5. @max полностью забыл об этом, отредактирует ответ