Capistrano部署抛出Psych错误:safe_load参数数量不符(传入4个,预期1个)
解决Bundle Install时的Psych参数不兼容错误
你遇到的是Ruby 2.5.x 与高版本 Psych gem 不兼容的问题——Psych 4.x 改动了 safe_load 方法的参数签名,但 Ruby 2.5.3 自带的 Rubygems 仍在使用旧的参数调用逻辑,直接导致了参数数量不匹配的报错。
下面是具体的解决步骤:
1. 锁定Psych到兼容版本
在项目的 Gemfile 中添加一行,强制使用4.0以下的Psych版本:
gem 'psych', '< 4.0'
2. 本地更新依赖并提交锁文件
在本地环境执行命令更新依赖,生成新的锁文件后提交到版本控制:
bundle install git add Gemfile Gemfile.lock git commit -m "Lock psych version to <4.0 for Ruby 2.5 compatibility"
3. 清理部署服务器的Gem缓存(推荐操作)
登录部署服务器,清理Bundler缓存,避免残留的高版本Psych干扰部署:
bundle clean --force
4. 重新执行部署
现在重新运行Capistrano部署命令,bundle install 环节应该就能正常完成了。
为什么会突然触发这个问题?
你提到之前部署正常且未修改代码,大概率是某个依赖gem的新版本间接引入了Psych 4.x。本地环境因为已有缓存或锁文件限制没拉取这个版本,但部署服务器在本次部署时尝试安装了高版本Psych,触发了Ruby 2.5.x Rubygems与Psych 4.x的API兼容性冲突。
内容的提问来源于stack exchange,提问作者KavitaC
相关产品推荐
相关产品推荐

