Ruby - Digest::Digest已被弃用; 使用Digest代替

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的一个bug。是否有修复方法?据我所知,目前还没有可用的补丁。

尽管我的应用程序使用了Fog和其他一些与此消息相关的gem,但我正在使用经过修补的版本,它们没有这个bug。因此,我认为这是Ruby的问题。

3个回答

51

借用这个线程的回复:

OpenSSL :: Digest :: Digest 从非常古老的时代,如 Ruby 1.8就开始不建议使用,最近已经被弃用

如果你搜索错误信息,你会发现很多 gem,包括 fog,仍在使用已弃用的语法。

我认为在所有 gem 更新之前需要一段时间。如果你在使用的库中遇到了这个弃用警告,请向维护者报告。

以下是一些示例:

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

谢谢,我会报告这个问题,并等待它解决。 - stephenmurdoch
2
s3_direct_upload 是另一个带有此弃用警告的宝石:https://github.com/waynehoover/s3_direct_upload/issues/148 - nathany
我的问题出在asset_sync gem上,它依赖于旧版本的fog。执行“bundle update asset_sync”的命令解决了我的问题。 - CafeHey

23

如果您正在使用bundler,找出造成问题的原因的一个好方法是在您的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

1
我在本地和开发环境都尝试了这个技巧,但grep命令没有返回任何结果。 - gitb
@gitb 尝试仅使用“Digest”这样的部分名称进行grep。也许它们被分成了几行。除此之外,它要么在你的代码中(因此grep你的项目代码),要么我不知道 :) - mraaroncruz

13

使用 OpenSSL::Digest 代替弃用的 OpenSSL::Digest::Digest


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接