Capistrano 3部署报错:libxml2缺失及Gem原生扩展构建失败
我来帮你搞定这两个Capistrano部署的问题,都是我之前踩过的坑,给你整理了实用的解决方案:
问题1:未找到“libxml2”包的RuntimeError
这个错误是因为你的服务器系统缺少libxml2的开发依赖包——gem在编译原生扩展的时候需要用到它的头文件和库文件。根据你的服务器系统类型,执行对应的安装命令即可:
如果你用的是Ubuntu/Debian系列:
sudo apt-get install libxml2-dev libxslt-dev
如果你用的是CentOS/RHEL系列:
sudo yum install libxml2-devel libxslt-devel
安装完成后,重新运行Capistrano部署命令;如果之前bundle已经缓存了失败的gem,可以登录服务器到应用目录,执行:
bundle install --deployment
之后再重新部署就能解决这个问题了。
问题2:RVM版本警告 + Gem原生扩展构建失败
这是两个关联的小问题,我们分开处理:
第一步:处理RVM版本警告
你有两个选择:
- 直接禁用警告:如果暂时不想升级RVM,执行服务器提示的命令即可:
echo rvm_autoupdate_flag=0 >> ~/.rvmrc - 升级RVM到稳定版:更推荐这个方案,一劳永逸解决警告,还能修复潜在的环境问题:
升级完成后记得重新加载RVM配置:rvm get stablesource ~/.rvmrc
第二步:修复Gem原生扩展构建失败
你提到的ovirt-engine-sdk这类gem需要编译原生扩展,除了之前的libxml2依赖,还需要基础的编译工具。先在服务器上安装这些必备工具:
Ubuntu/Debian:
sudo apt-get install build-essential
CentOS/RHEL:
sudo yum groupinstall "Development Tools"
安装完工具后,清理之前失败的gem构建缓存,重新安装:
cd /home/deployer/apps/app-staging/shared/bundle/ruby/2.3.0/gems/ rm -rf ovirt-engine-s* # 删除失败的gem目录 bundle install --deployment
之后再运行Capistrano部署命令,应该就能顺利完成了。
内容的提问来源于stack exchange,提问作者user984621
相关产品推荐
相关产品推荐

