我在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/http
或Faraday
,我假设后者需要前者。由于最近和很久以前都见过这种行为,这是重新加载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?
gem“ net-http”
就解决了这个问题。我的bundler已经更新了。 - aaronaruby -v
后,显示ruby 2.7.2p137
。 - aaronanet-http
gem 版本为0.2.2
。 - aarona