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 已弃用;使用摘要的主要内容,如果未能解决你的问题,请参考以下文章
已弃用:指令 'allow_url_include' 在第 0 行的 Unknown 中已弃用
Modernizr.load 已弃用。 Yepnope.js 已弃用。怎么办?
UIAlertView 已弃用:首先在 iOS 9.0 中弃用 - UIAlertView 已弃用。将 UIAlertController 与首选样式一起使用