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/http或Faraday,我假设后者需要第一个。最近和很久以前就看到过这种行为,这是宝石的重新加载,如果我是正确的,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)
| 归档时间: |
|
| 查看次数: |
2159 次 |
| 最近记录: |