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

升级Ruby至3.0.4后Capistrano仍调用旧版本2.5.1的问题求助

问题原因及解决方案

可能的原因

  • RVM版本过旧:你使用的RVM 1.29.9版本对Ruby 3.0+的版本号格式支持不完善,无法正确识别3.0.4这类版本标识,导致误判版本未安装。
  • Capistrano配置未生效:仅更新deploy.rb和production.rb可能不够,Capistrano的RVM集成需要确保配置被正确加载,且未被其他配置覆盖。
  • Gemfile版本未同步更新:如果项目根目录的Gemfile里仍指定了ruby '2.5.1',Capistrano会优先读取这个值来确定Ruby版本,忽略部署配置里的设置。
  • 服务器Shell环境未加载RVM:部署用户的SSH会话可能没有正确初始化RVM环境,导致Capistrano执行命令时无法切换到指定的Ruby版本。

解决方案

1. 升级服务器上的RVM版本

在服务器上执行以下命令更新RVM,使其支持Ruby 3.0+版本:

rvm get stable

更新完成后,重新检查RVM能识别的Ruby版本:

rvm list known

确认输出中包含ruby-3.0.4。

2. 确认Capistrano的Ruby版本配置正确

确保在deploy.rb中明确设置Ruby版本,且配置位于Capistrano加载RVM插件之后:

# 确保先加载rvm插件
require 'capistrano/rvm'

# 设置目标Ruby版本
set :ruby_version, '3.0.4'
# 如果使用gemset,也需要同步更新
# set :rvm_gemset, 'your-gemset-name'

同时检查config/deploy/production.rb中没有覆盖这个配置。

3. 更新Gemfile中的Ruby版本

修改项目根目录的Gemfile,将Ruby版本改为3.0.4:

ruby '3.0.4'

执行bundle install更新本地依赖,然后提交并推送代码到仓库。

4. 确保服务器SSH会话加载RVM环境

检查部署用户的~/.bashrc或~/.zshrc(根据使用的shell)是否包含RVM的初始化代码:

# 示例bash初始化代码
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"

如果没有,添加后重新登录服务器,或者在Capistrano的deploy配置中强制加载RVM:

# 在deploy.rb中添加
set :rvm_custom_path, '$HOME/.rvm'
set :rvm_type, :user # 如果RVM是安装在用户目录下

5. 验证服务器上的Ruby版本

在服务器上执行以下命令,确认Ruby 3.0.4已正确安装并可被RVM识别:

rvm use 3.0.4
ruby -v

如果能正常切换到3.0.4版本,说明RVM环境正常。

完成以上步骤后,重新执行cap production deploy即可使用新的Ruby版本部署。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 10:16:22