簡體   English   中英

Ruby 2.7.4 凈常數警告

[英]Ruby 2.7.4 Net Constant Warnings

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/httpFaraday ,我假設后者需要第一個。 最近和以前看到過這種行為,這是net gem 的重新加載,如果我是正確的話,它是core的一部分。 我只是不確定為什么要重新加載。

出於幾個原因,我使用rbenvruby版本,這不會改變。 我的 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]

rubyshebang和請求版本的細微差別可能是問題所在。 我有很多依賴於shebang的腳本,它指向當前的rbenv版本,這正是我想要的。 我不時更改版本並且不想對該指令進行硬編碼。

有沒有辦法讓我明白為什么會這樣? 我怎樣才能讓這些 go 消失? 我怎樣才能停止重新加載已經加載的core寶石?

類似的問題: Getting "warning: already initialized constant" on assets precompile at time of cap deploy

解決方案/解決方法在這里找到: https://github.com/ruby/net-imap/issues/16

看起來簡單的答案是將gem "net-http"添加到您的Gemfile。

Bundler是一些依賴問題的罪魁禍首,並在以前的Gemfile.lock版本之上重新加載各種版本......類似的東西。 以這種方式更新:

bundle update --bundler

我不得不將以下兩行添加到Gemfile中以最終消除所有警告:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM