如何仅更新用户目录中安装的Ruby Gems?
只更新用户目录下的Ruby Gems(无需rbenv/rvm)
你现在的困扰很典型:默认gem update会碰系统级Gems导致权限报错,而gem update --user-install又会把所有Gems重复装到用户目录。下面给你两种直接的解决办法,完全不需要额外版本管理工具:
方法一:临时单次生效方案
在终端里直接执行这条命令,临时让RubyGems只聚焦你的用户目录:
GEM_HOME=/Users/USERNAME/.gem/ruby/2.3.0 GEM_PATH=/Users/USERNAME/.gem/ruby/2.3.0 gem update
这条命令通过临时覆盖环境变量,让gem update只扫描和更新你用户目录下已有的Gems,完全不会触碰系统级的Gems,自然也就不会出现权限问题。
方法二:永久配置方案(一劳永逸)
如果不想每次都敲长命令,可以把配置写到.bash_profile里,让终端每次启动都自动生效:
- 打开你的
.bash_profile文件:
open ~/.bash_profile
- 添加以下内容(记得把
USERNAME替换成你的实际用户名):
# 让RubyGems默认使用用户目录,避免系统权限问题 export GEM_HOME=/Users/USERNAME/.gem/ruby/2.3.0 export GEM_PATH=/Users/USERNAME/.gem/ruby/2.3.0 export PATH=$PATH:$GEM_HOME/bin
- 保存文件后,让配置立即生效:
source ~/.bash_profile
之后你直接敲gem update就只会更新用户目录下的Gems,而且以后装新Gems时,默认也会安装到用户目录(不用每次加--user-install参数)。
验证配置是否生效
执行gem env命令,检查输出里的关键路径:
gem env
你应该能看到类似这样的结果(核心部分):
INSTALLATION DIRECTORY: /Users/USERNAME/.gem/ruby/2.3.0
GEM PATHS:
- /Users/USERNAME/.gem/ruby/2.3.0
为什么之前的方法行不通?
- 默认
gem update会遍历所有GEM PATHS里的目录,包括系统的/Library/Ruby/Gems/2.3.0,但你没有修改系统目录的权限,所以触发报错。 gem update --user-install的逻辑是把所有更新后的Gems都安装到用户目录,不管原本是不是系统自带的,这就导致了不必要的重复安装,不符合你的需求。
而上面的方法通过限制GEM_HOME和GEM_PATH的范围,让RubyGems只处理你的用户目录,完美解决了这两个问题。
内容的提问来源于stack exchange,提问作者dsoreilly




