Ruby - Digest::Digest 已弃用;使用摘要

Posted

技术标签:

【中文标题】Ruby - Digest::Digest 已弃用;使用摘要【英文标题】:Ruby - Digest::Digest is deprecated; Use Digest 【发布时间】:2014-02-06 17:28:24 【问题描述】:

每当我运行测试或启动 Rails 服务器时,我都会收到此警告。

当我从 .rvm 文件夹运行 grep 时,我看到以下内容:

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

所以看起来这是一个 Ruby 2.1.0 的错误。有任何修复吗?据我所知,目前还没有可用的补丁。

虽然我的应用程序使用了 Fog 和许多其他与此消息相关的问题,但我使用的是没有错误的修补版本。所以我认为 Ruby 有问题。

【问题讨论】:

【参考方案1】:

借用this thread的回复

不鼓励从very ancient era such as Ruby 1.8 到最后was deprecated recently 使用OpenSSL::Digest::Digest。

如果您搜索错误消息,您会看到很多 gem,including fog,仍在使用已弃用的语法。

我认为更新所有宝石需要一段时间。如果您在使用的某个库中遇到弃用,我鼓励您向维护者报告。

这里有几个例子

https://github.com/fog/fog/pull/2473 https://github.com/alexreisner/geocoder/pull/580 https://github.com/ruby/ruby/pull/446

您的 Rails 应用程序可能依赖于使用该旧语法的 gem。

【讨论】:

谢谢,我会报告的,等待它消失。 s3_direct_upload 是另一个带有此弃用警告的宝石:github.com/waynehoover/s3_direct_upload/issues/148 我的来自asset_sync gem,它有一个旧版本的雾作为依赖项。 bundle update asset_sync 为我修复了它。【参考方案2】:

使用OpenSSL::Digest 而不是已弃用的OpenSSL::Digest::Digest

【讨论】:

【参考方案3】:

如果您使用的是 bundler,找出导致问题的原因的一个好方法是通过 grep 遍历您的 Gemfile 中定义的所有 gem:

# 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

还要确保您没有锁定 Gemfile 中的 gem 版本。

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

【讨论】:

在本地和开发人员上都试过这个技巧,但 grep 是空的。 @gitb 尝试 grep 名称的一部分,例如 Digest。也许他们把它分成几行。除此之外,它要么在你的代码中(所以 grep 你的项目代码)或者我不知道 :)

以上是关于Ruby - Digest::Digest 已弃用;使用摘要的主要内容,如果未能解决你的问题,请参考以下文章

Ruby Squeel 库弃用核心扩展

PHP 已弃用:each() 函数已弃用 [重复]

已弃用:指令 'allow_url_include' 在第 0 行的 Unknown 中已弃用

Modernizr.load 已弃用。 Yepnope.js 已弃用。怎么办?

UIAlertView 已弃用:首先在 iOS 9.0 中弃用 - UIAlertView 已弃用。将 UIAlertController 与首选样式一起使用

DTD 是不是已弃用?