You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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版本。

修复步骤

按顺序执行以下排查操作即可解决:

  1. 确认当前会话的Ruby加载路径
    执行命令查看当前调用的Ruby路径和版本:
    which ruby
    ruby -v
    
    如果输出的Ruby路径在/usr/bin/系统目录下,说明当前用的是系统自带旧版Ruby,没有加载Chatwoot运行环境的版本。
  2. 切换到Chatwoot专属运行用户操作
    官方部署脚本默认会创建chatwoot用户单独部署服务,所有升级操作都需要在该用户下执行,不要直接用root操作:
    sudo -i -u chatwoot
    cd /home/chatwoot/chatwoot
    ruby -v
    
    确认此时输出的Ruby版本为3.0.2后,再执行后续升级步骤。
  3. 修正rbenv版本绑定(使用rbenv管理Ruby的场景)
    进入项目根目录后执行以下命令,绑定当前目录的Ruby版本并刷新环境:
    rbenv local 3.0.2
    rbenv rehash
    bundle install
    
  4. 重装依赖后执行预编译
    如果切换用户后执行bundle exec ruby -v仍返回2.7.0,说明现有gem依赖是基于旧版Ruby安装的,执行以下命令重装依赖后再跑预编译:
    bundle install --redownload
    RAILS_ENV=production bundle exec rails assets:precompile
    

内容的提问来源于stack exchange,提问作者Farr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 21:45:38