如何使用rbenv为不同Ruby版本维护独立gem副本,避免相互覆盖
问题根因
你当前遇到不同Ruby版本的gem互相覆盖,核心原因是你手动配置了GEM_HOME环境变量为/Users/jing/.gem,强制所有版本的Ruby都把gem安装到同一个全局共享路径,rbenv原生的多版本gem隔离机制被覆盖失效。
解决方案(推荐原生方案,无需额外插件)
直接删除自定义的GEM_HOME/GEM_PATH配置,恢复rbenv默认的隔离逻辑即可:
- 打开你使用的shell配置文件:
- 若使用zsh,执行
vim ~/.zshrc - 若使用bash,执行
vim ~/.bash_profile
- 若使用zsh,执行
- 搜索所有包含
export GEM_HOME、export GEM_PATH的语句,全部删除或注释掉 - 重载配置使其生效:
- zsh执行
source ~/.zshrc - bash执行
source ~/.bash_profile
- zsh执行
- 验证配置是否生效:
分别切换不同Ruby版本,执行gem env | grep "INSTALLATION DIRECTORY",正常情况下两个版本的安装路径会完全独立:- 系统Ruby的安装路径为系统默认路径
- rbenv管理的2.7.5版本安装路径为
/Users/jing/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0
- 清理历史重复安装的gem后,重新在不同Ruby版本下安装需要的包,就不会再出现互相覆盖的问题,rbenv的shims机制会自动对应不同版本的gem可执行文件,无需手动把gem的bin目录加入PATH。
备选方案(需额外插件)
如果你必须保留自定义GEM_HOME的配置,可以安装rbenv-gemset插件,为每个Ruby版本配置独立的gemset,实现不同版本的gem隔离。
内容的提问来源于stack exchange,提问作者Jingguo Yao
相关产品推荐
相关产品推荐

