Capistrano部署报错SSHKit::Runner::ExecuteError: No digester supplied求助
解决Capistrano部署时的"No digester supplied"错误
作为编程新手遇到这个问题别慌,这个报错大概率是capistrano-rbenv和依赖库版本不兼容导致的,咱们一步步来修复:
1. 检查并更新Gemfile里的相关依赖
首先打开项目根目录下的Gemfile,替换成下面的兼容最新版本的依赖配置:
group :development do gem 'capistrano', '~> 3.17' gem 'capistrano-rails', '~> 1.6' gem 'capistrano-rbenv', '~> 2.2' gem 'capistrano-bundler', '~> 2.1' end
然后在本地终端执行命令更新依赖:
bundle install bundle update capistrano capistrano-rbenv capistrano-rails capistrano-bundler
2. 修复Capistrano配置文件中的rbenv设置
打开项目的config/deploy.rb文件,找到rbenv相关配置,补充digester的指定(新版本rbenv需要明确摘要算法):
set :rbenv_type, :user # 若服务器上rbenv是系统级安装,就改成:system set :rbenv_ruby, '你的Ruby版本号' # 比如 '3.2.2',必须和服务器上的Ruby版本一致 set :rbenv_custom_path, '/home/deploy/.rbenv' # 对应服务器上rbenv的实际安装路径 # 关键:添加这行指定digester set :rbenv_digester, :sha256
3. 验证服务器上的rbenv配置
登录到你的生产服务器(终端执行ssh deploy@xx.xxx.xx.xx),运行下面的命令确认信息:
rbenv version # 查看服务器当前使用的Ruby版本 echo $HOME/.rbenv # 确认rbenv的安装路径
确保本地deploy.rb里的配置和服务器上的实际信息完全匹配。
4. 重新部署
回到本地终端,执行带trace的命令验证修复效果:
cap production deploy --trace
如果前面的步骤都配置正确,这个报错应该就消失了。
补充说明
这个错误的本质是:新版本的rbenv在验证Ruby版本时,要求明确指定摘要算法(digester),而旧版的capistrano-rbenv没有默认配置这一项,所以咱们手动指定:sha256就能解决问题啦。
内容的提问来源于stack exchange,提问作者OKMantis
相关产品推荐
相关产品推荐

