【问题标题】:Digest::Digest is deprecated; use DigestDigest::Digest 已弃用;使用摘要
【发布时间】:2016-10-17 09:26:30
【问题描述】:

我收到以下错误

Digest::Digest is deprecated; use Digest

当我尝试启动我的 Rails 服务器时。我试图在我的源代码中搜索Digest::Digest,但我没有在任何地方使用它。知道如何解决吗?

只有我使用的地方是

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

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

【问题讨论】:

标签: ruby-on-rails ruby-on-rails-4 fog


【解决方案1】:

它最有可能被您的应用所依赖的 gem 之一使用。

安装(除非已经安装)ack tool 并运行以下命令:

# 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/

它将显示是否有任何 gem 使用它,如果是 - 将显示源代码行。

但基本上你能做的并不多:

  1. 检查这个gem是否有更新的版本,解决了弃用警告
  2. 为 gem 写一个补丁,解决警告并使用补丁版本(IMO 不是很酷的想法)
  3. 在 gem 维护者开始工作之前,请注意警告
  4. 您可以使用 ActiveSupport::Deprecation.silenced = true 完全消除折旧警告(IMO 也不是很酷的主意)。正如 @max 在 cmets 中所说,还有一种方法可以使特定警告静音):

    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. 不要使用这个宝石

【讨论】:

  • 我使用的是最新版本:(
  • @HarshaMV 然后就像我说的,你要么等到 gem 维护者更新它,要么接受警告消息..
  • @HarshaMV 没有问题 :)
  • 您可以使用ActiveSupport::Deprecation.silenced = trueActiveSupport::Deprecation.silenced do; end 将折旧通知静音。
  • @max 完全忘记了这个,将编辑答案
猜你喜欢
  • 2014-02-06
  • 2014-10-12
  • 2016-06-21
  • 2013-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-17
相关资源
最近更新 更多