为何`gem list`显示多个Bundler默认版本?如何设置默认版本
Bundler多默认版本问题:原因与解决方法
为什么会出现两个默认版本?
- Ruby安装包自带了一个bundler版本(比如你这里的2.1.4),属于Ruby核心依赖的一部分,因此会被标记为
default。 - 之后通过
gem install bundler手动安装了新版本(2.3.22),但Ruby自带的旧版本不会被自动替换或删除,导致两个版本都显示为默认。 - CI机器可能之前执行过安装旧版本的操作,或者Ruby版本更新后旧bundler残留,同时又安装了新版本,最终出现双默认的情况。
如何更新默认版本,永久解决冲突?
方法1:卸载旧的默认版本
直接卸载旧版本,让新版本成为唯一默认:
gem uninstall bundler -v 2.1.4
执行后再运行gem list bundler,就只会显示2.3.22为默认版本。
方法2:设置全局默认bundler版本
如果不想卸载旧版本,可以通过bundler命令指定全局默认版本:
# 先确保新版本已安装 gem install bundler -v 2.3.22 # 设置全局默认版本 bundle config set --global bundler.version 2.3.22
之后所有项目默认会使用2.3.22,除非项目Gemfile.lock指定了更严格的版本限制。
方法3:在CI脚本中强制指定版本
在CI运行脚本的开头添加以下命令,确保每次构建都使用目标版本:
gem update bundler bundle install --bundler 2.3.22
这样可以直接覆盖项目中旧的bundler激活逻辑,彻底避免版本冲突警告。
补充:更新项目的Gemfile.lock记录
如果希望项目本身默认使用新版本,重新生成Gemfile.lock即可:
bundle update --bundler
这会把Gemfile.lock中的bundler版本更新为当前使用的2.3.22,后续CI运行时会自动激活这个版本。
内容的提问来源于stack exchange,提问作者mokagio
相关产品推荐
相关产品推荐

