Rails运行rake命令报错:Ruby版本与Gemfile指定版本不匹配
Chatwoot升级时Ruby版本不匹配报错排查方案
问题场景
- 运行环境:Ubuntu系统AWS服务器,部署自托管Chatwoot服务
- 触发操作:参照官方Linux虚拟机部署指南升级Chatwoot版本,执行资产预编译步骤
- 报错输出:
Your Ruby version is 2.7.0, but your Gemfile specified 3.0.2
- 异常现象:手动查询环境Ruby版本时,返回版本号与Gemfile指定的3.0.2完全一致,无法定位故障点。
故障根因
执行资产预编译命令时调用的Ruby解释器路径,和手动查询版本时调用的解释器路径不一致。常见触发场景包括:直接用root用户执行升级命令、版本管理工具(rbenv/rvm)的环境变量未在当前会话加载、项目目录未绑定正确的Ruby版本,导致命令实际调用了系统预装的旧版2.7.0 Ruby,而非部署Chatwoot所用的3.0.2版本。
修复步骤
按顺序执行以下排查操作即可解决:
- 确认当前会话的Ruby加载路径
执行命令查看当前调用的Ruby路径和版本:
如果输出的Ruby路径在which ruby ruby -v/usr/bin/系统目录下,说明当前用的是系统自带旧版Ruby,没有加载Chatwoot运行环境的版本。 - 切换到Chatwoot专属运行用户操作
官方部署脚本默认会创建chatwoot用户单独部署服务,所有升级操作都需要在该用户下执行,不要直接用root操作:
确认此时输出的Ruby版本为3.0.2后,再执行后续升级步骤。sudo -i -u chatwoot cd /home/chatwoot/chatwoot ruby -v - 修正rbenv版本绑定(使用rbenv管理Ruby的场景)
进入项目根目录后执行以下命令,绑定当前目录的Ruby版本并刷新环境:rbenv local 3.0.2 rbenv rehash bundle install - 重装依赖后执行预编译
如果切换用户后执行bundle exec ruby -v仍返回2.7.0,说明现有gem依赖是基于旧版Ruby安装的,执行以下命令重装依赖后再跑预编译:bundle install --redownload RAILS_ENV=production bundle exec rails assets:precompile
内容的提问来源于stack exchange,提问作者Farr
相关产品推荐
相关产品推荐

