红宝石2.7.4网常量警告

4

我在crontab和终端手动运行一个ruby脚本时,不断收到重复的警告。

为了使内容更加通俗易懂,此处未进行解释。请注意保留HTML标签。

/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版本,这正是我想要的。我会不时地更改版本,不想硬编码该指令。
有没有办法可以查看为什么会出现这种情况?如何消除这些问题?如何停止重新加载已经加载的核心gems?
2个回答

6

我最终不得不在Gemfile中添加以下两行代码,以消除所有警告:

gem 'net-http'
gem 'uri', '0.10.0'    # force the default version for ruby 2.7

0

Bundler 是罪魁祸首,由于某些依赖问题,会在之前的 Gemfile.lock 版本上重新加载各种版本...大概就是这样。可以通过以下方式进行更新:

bundle update --bundler

我已经删除了之前的回答。更新到支持默认 gem 的新版本 bundler 似乎是正确的解决方案。 - amcvitty
3
这对我没有用。但是@amcvitty删除的答案有用。仅在我的Gemfile中添加 gem“ net-http” 就解决了这个问题。我的bundler已经更新了。 - aarona
@aaron,你用的是哪个版本的Ruby?最近有一些版本会频繁出现这些警告。 - Rich_F
@Rich_F 输入 ruby -v 后,显示 ruby 2.7.2p137 - aarona
同样作为参考,已安装的 net-http gem 版本为 0.2.2 - aarona
那个版本可能是嘈杂的罪魁祸首。人们开始抱怨这种情况发生在弃用的方法等方面。 - Rich_F

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