使用Hatchbox部署预发布应用时gem install bundler执行失败求助
解决Hatchbox部署预发布应用时的Gem::FilePermissionError问题
问题核心
部署脚本使用的应用专属用户,和你手动登录执行sudo gem install的root权限环境不一致,导致部署时没有gem安装目录的写入权限。
修复方法
1. 修正部署用户的gem目录权限
登录服务器,切换到Hatchbox对应的部署用户(通常是应用名+-staging,比如myapp-staging):
su - <你的部署用户名>
执行gem env查看GEM PATHS字段,找到gem的安装目录。之后修改该目录的所有者为部署用户:
sudo chown -R <部署用户名>:<部署用户名> <gem路径>
2. 让部署脚本使用用户级gem安装
在Hatchbox的部署配置中,修改bundler安装命令,添加--user-install参数,将gem安装到部署用户的个人目录,避开系统级权限限制:
gem install bundler -v 2.5.23 --no-document --force --user-install
3. 确保版本管理器环境加载正常
如果服务器用了rbenv或rvm,检查部署用户的shell配置文件(~/.bashrc或~/.profile),确认是否有版本管理器的初始化脚本:
- 若用rbenv,添加:
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
- 若用rvm,添加:
echo 'source ~/.rvm/scripts/rvm' >> ~/.bashrc
执行source ~/.bashrc重新加载配置。
4. 提前为部署用户预安装bundler
切换到部署用户,手动安装指定版本的bundler,让部署流程跳过安装环节:
su - <部署用户名> gem install bundler -v 2.5.23 --no-document
内容的提问来源于stack exchange,提问作者Jamie Crone
相关产品推荐
相关产品推荐

