【问题标题】:Ruby 2.7.4 Net Constant WarningsRuby 2.7.4 网络常量警告
【发布时间】:2021-12-22 03:10:06
【问题描述】:

crontab 中运行ruby 脚本以及在终端中手动运行时,我都会收到重复警告。

/Users/rich/.rbenv/versions/2.7.4/lib/ruby/2.7.0/net/protocol.rb:66: warning: already initialized constant Net::ProtocRetryError
/Users/rich/.rbenv/versions/2.7.4/lib/ruby/gems/2.7.0/gems/net-protocol-0.1.2/lib/net/protocol.rb:68: warning: previous definition of ProtocRetryError was here
/Users/rich/.rbenv/versions/2.7.4/lib/ruby/2.7.0/net/protocol.rb:206: warning: already initialized constant Net::BufferedIO::BUFSIZE
/Users/rich/.rbenv/versions/2.7.4/lib/ruby/gems/2.7.0/gems/net-protocol-0.1.2/lib/net/protocol.rb:208: warning: previous definition of BUFSIZE was here
/Users/rich/.rbenv/versions/2.7.4/lib/ruby/2.7.0/net/protocol.rb:503: warning: already initialized constant Net::NetPrivate::Socket
/Users/rich/.rbenv/versions/2.7.4/lib/ruby/gems/2.7.0/gems/net-protocol-0.1.2/lib/net/protocol.rb:504: warning: previous definition of Socket was here

我已将脚本更改为使用net/httpFaraday,我假设后者需要第一个。在最近看到这种行为并回来之后,这是net gem 的重新加载,如果我是正确的,它是core 的一部分。我只是不确定它为什么要重新加载。

出于几个原因,我使用rbenv 来处理ruby 版本,这不会改变。我的 shebang 是 #!/Users/rich/.rbenv/shims/ruby 但我的 ruby 版本有点不同:

$ which ruby
==> /Users/rich/.rbenv/versions/2.7.4/bin/ruby

$ ruby -v
==> Ruby version: ruby 2.7.4p191 (2021-07-07 revision a21a3b7d23) [arm64-darwin21]

shebang 和请求的ruby 版本的细微差别可能是问题所在。我有很多依赖于shebang 的脚本,它指向当前的rbenv 版本,这正是我想要的。我不时更改版本,不想硬编码该指令。

有没有办法让我知道为什么会这样?我怎样才能让这些消失?如何停止重新加载已加载的 core gem?

【问题讨论】:

    标签: ruby rbenv net-http


    【解决方案1】:

    Bundler 是一些依赖问题的罪魁祸首,并在以前的Gemfile.lock 版本之上重新加载各种版本......类似的东西。以这种方式更新:

    bundle update --bundler
    

    【讨论】:

    • 我已经删除了我之前的答案。似乎更新到支持默认 gem 的较新版本的 bundler 是正确的解决方案
    猜你喜欢
    • 2011-06-03
    • 1970-01-01
    • 1970-01-01
    • 2011-08-20
    • 2017-11-12
    • 2011-12-06
    • 2017-05-18
    • 2023-04-10
    相关资源
    最近更新 更多