使用Capistrano部署Rails应用时执行assets:precompile触发Ruby报错
解决方案
你遇到的是FFI gem预编译版本与服务器CPU架构不兼容导致的非法指令崩溃,这是FFI 1.12.x版本的已知问题,可按以下顺序尝试解决:
- 升级FFI到兼容版本
在项目Gemfile中指定FFI最低版本,避开有问题的1.12.x系列:
本地执行gem 'ffi', '>= 1.15.5'bundle install更新Gemfile.lock后,提交两个文件到代码仓库,重新触发部署即可。 - 强制服务器本地编译FFI
如果不方便升级FFI版本,可登录部署服务器,在项目shared/bundle目录下执行命令,卸载现有FFI并强制本地编译安装:
编译完成后重新部署,即可解决预编译版本的指令集不兼容问题。gem uninstall ffi -v 1.12.1 gem install ffi -v 1.12.1 --platform ruby - 验证方案
登录服务器进入当前最新的部署release目录,手动执行bundle exec rake assets:precompile,如果复现同样的崩溃报错,即可确认是FFI编译问题,上述两个方案均能解决。
内容的提问来源于stack exchange,提问作者Dejv
相关产品推荐
相关产品推荐

