You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Bundler会在Gemfile.lock中引入不兼容的依赖gem?

解决Ruby 2.6 + Rails 6.0中net-protocol常量重复定义警告

这个问题的核心原因很明确:Ruby 2.6.x版本的标准库中已经内置了net/protocol模块,而Bundler通过actionmailbox → mail → net-imap/net-pop → net-protocol的依赖链引入了独立的net-protocol gem(版本0.2.1),两者的常量定义重复,导致了警告。

具体冲突细节

你看到的警告是因为系统自带的标准库文件和gem中的文件都定义了相同的常量:

/home/alexander/.rbenv/versions/2.6.1/lib/ruby/2.6.0/net/protocol.rb:66: warning: already initialized constant Net::ProtocRetryError
/home/alexander/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/gems/net-protocol-0.2.1/lib/net/protocol.rb:68: warning: previous definition of ProtocRetryError was here
/home/alexander/.rbenv/versions/2.6.1/lib/ruby/2.6.0/net/protocol.rb:206: warning: already initialized constant Net::BufferedIO::BUFSIZE
/home/alexander/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/gems/net-protocol-0.2.1/lib/net/protocol.rb:214: warning: previous definition of BUFSIZE was here
/home/alexander/.rbenv/versions/2.6.1/lib/ruby/2.6.0/net/protocol.rb:503: warning: already initialized constant Net::NetPrivate::Socket
/home/alexander/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/gems/net-protocol-0.2.1/lib/net/protocol.rb:541: warning: previous definition of Socket was here

从你的Gemfile.lock片段也能看到完整依赖链:

mail (2.8.0.1)
  mini_mime (>= 0.1.1)
  net-imap
  net-pop
  net-smtp
net-imap (0.3.4)
  date
  net-protocol
net-pop (0.1.2)
  net-protocol
net-protocol (0.2.1)
  timeout
net-smtp (0.3.3)
  net-protocol

解决方案

要解决这个冲突,你需要锁定net-protocol到与Ruby 2.6兼容的旧版本——net-protocol 0.2.x是为Ruby 2.7+设计的,而Ruby 2.6需要0.1.x版本才能避免常量冲突。

步骤如下:

  1. 在你的Gemfile中添加指定版本的net-protocol:
    gem 'net-protocol', '~> 0.1.2'
    
  2. 执行bundle更新命令,让Bundler安装兼容版本:
    bundle update net-protocol
    
  3. 再次运行rails命令(比如rails db:create),警告应该就会消失了。

补充说明

为什么会自动引入这个gem?因为Rails 6的actionmailbox默认依赖mail gem,而mail 2.8.x版本开始将原本属于Ruby标准库的net-imap、net-pop、net-smtp拆分成了独立的gem,这些独立gem又依赖net-protocol。但Ruby 2.6还没有完成这些库的拆分,所以就出现了重复加载的问题。

内容的提问来源于stack exchange,提问作者afarley

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 10:45:28