【发布时间】: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/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 版本,这正是我想要的。我不时更改版本,不想硬编码该指令。
有没有办法让我知道为什么会这样?我怎样才能让这些消失?如何停止重新加载已加载的 core gem?
【问题讨论】: