【问题标题】:Ruby - Digest::Digest is deprecated; Use DigestRuby - Digest::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 有问题。

【问题讨论】:

    标签: ruby warnings ruby-2.1


    【解决方案1】:

    借用this thread的回复

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

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

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

    这里有几个例子

    您的 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 你的项目代码)或者我不知道 :)
      猜你喜欢
      • 1970-01-01
      • 2014-10-12
      • 2016-06-21
      • 2013-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-17
      相关资源
      最近更新 更多