Ruby 2.7.4 网络持续警告

Ric*_*h_F 4 ruby net-http rbenv

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

/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
Run Code Online (Sandbox Code Playgroud)

我已将脚本更改为 usenet/httpFaraday,我假设后者需要第一个。最近和很久以前就看到过这种行为,这是宝石的重新加载,如果我是正确的,net这是宝石的一部分。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]
Run Code Online (Sandbox Code Playgroud)

shebang与要求的版本之间的细微差别ruby可能就是问题所在。我有很多脚本依赖于它shebang,它指向当前rbenv版本,这就是我想要的。我不时更改版本,并且不想对该指令进行硬编码。

有什么方法可以让我明白为什么会发生这种情况吗?我怎样才能让这些消失呢?如何停止重新加载core已经加载的宝石?

小智 6

我必须添加以下两行才能Gemfile最终消除所有警告:

gem 'net-http'
gem 'uri', '0.10.0'    # force the default version for ruby 2.7
Run Code Online (Sandbox Code Playgroud)