Ubuntu20.04服务器项目目录下rails -v无法运行及bundle install失败问题
解决方案:Bundle Install 安装FFI时被终止(Killed)问题
问题分析
出现Killed提示几乎都是因为服务器内存不足——编译FFI这类带原生扩展的Gem需要较多内存,小配置的DigitalOcean Droplet(比如1GB内存)容易触发系统的OOM(内存溢出)Killer进程,强制终止bundle安装进程。另外,缺少FFI编译依赖也可能导致安装失败。
步骤1:确认问题原因
先验证是否是内存不足导致:
# 查看内存使用情况 free -h # 检查系统日志里的OOM Killer记录 dmesg | grep -i "kill"
如果日志里出现类似Out of memory: Killed process的内容,即可确认是内存问题。
步骤2:安装FFI编译依赖
先确保系统安装了FFI编译所需的基础依赖包:
sudo apt update && sudo apt install -y libffi-dev build-essential
步骤3:临时添加Swap分区缓解内存压力
对于小内存服务器,添加Swap是最快速的解决方法:
- 创建2GB的Swap文件:
sudo fallocate -l 2G /swapfile
- 设置文件权限(仅root可访问,保证安全):
sudo chmod 600 /swapfile
- 格式化Swap文件:
sudo mkswap /swapfile
- 启用Swap:
sudo swapon /swapfile
步骤4:重新执行Bundle Install
现在内存资源足够支撑编译,重新运行安装命令:
bundle install
后续优化(可选)
如果不想每次重启服务器都重新启用Swap,可以将Swap设置为开机自动挂载:
- 编辑fstab配置文件:
sudo nano /etc/fstab
- 在文件末尾添加一行内容:
/swapfile none swap sw 0 0
- 保存退出后,执行
sudo mount -a验证配置生效。
如果以上方法仍未解决,建议升级Droplet的内存配置,或者尝试降低FFI的版本(需确认项目兼容性)。
内容的提问来源于stack exchange,提问作者Peter J
相关产品推荐
相关产品推荐

