35

每当我运行测试或启动 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 在这里有问题。

4

3 回答 3

51

借用这个帖子的回复

OpenSSL::Digest::Digest 从非常古老的时代(例如 Ruby 1.8)开始就不鼓励使用,最近终于被弃用了

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

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

这里有几个例子

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

于 2014-01-17T12:13:15.977 回答
23

如果您使用的是 bundler,找出导致问题的原因的一个好方法是通过 grep 中定义的所有 gem 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

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

# change
gem 'fog', '~> 1.15.0'
# to
gem 'fog', '~> 1.0'
# or omit the version if you are a cowboy/girl
于 2015-04-04T13:12:21.417 回答
12

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

于 2014-07-23T07:58:14.603 回答