升级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
相关产品推荐
相关产品推荐

