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

Rails应用通过Capistrano部署至AWS staging服务器时bundle命令未找到求助

解决Capistrano部署Rails应用时Puma启动提示bundle: command not found的问题

我之前部署Rails应用到AWS时也碰到过一模一样的问题,大概率是rbenv的环境变量没有在部署的shell会话中正确初始化,导致系统找不到rbenv管理的bundle命令。下面是几个亲测有效的解决思路:

1. 确保rbenv在非交互式shell中正确加载

Capistrano执行远程命令时,默认用的是非交互式登录shell,这类shell通常不会加载~/.bashrc,只会读取~/.bash_profile或~/.profile。你需要检查ubuntu用户的这些配置文件,确保rbenv的初始化代码存在:

打开~/.bash_profile(如果没有就新建),添加以下内容:

export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"

保存后在服务器上执行source ~/.bash_profile生效,重新部署试试。

2. 配置Capistrano的rbenv参数

如果你的Capistrano没有正确集成rbenv,也会导致命令执行环境不对。在项目的deploy.rb里添加以下配置:

set :rbenv_type, :user  # 表示rbenv安装在用户目录下
set :rbenv_ruby, '2.5.0'  # 指定项目使用的Ruby版本
set :rbenv_prefix, "RBENV_ROOT=#{fetch(:rbenv_path)} RBENV_VERSION=#{fetch(:rbenv_ruby)} #{fetch(:rbenv_path)}/bin/rbenv exec"
set :rbenv_map_bins, %w{rake gem bundle ruby rails puma}  # 让这些命令都通过rbenv执行

这样Capistrano会自动为bundle、puma等命令加上rbenv的环境前缀,确保用的是你指定版本的Ruby和对应的bundle。

3. 临时方案:直接使用bundle的绝对路径

如果上面的配置还没生效,可以先手动指定bundle的绝对路径应急。在服务器上执行which bundle(确保当前是rbenv的2.5.0环境),会得到类似~/.rbenv/shims/bundle的路径,然后把Puma启动命令里的bundle替换成这个绝对路径:

cd /home/ubuntu/medcordance/current && ( export RBENV_ROOT="$HOME/.rbenv" RBENV_VERSION="2.5.0" RACK_ENV="staging" ; ~/.rbenv/shims/bundle exec puma -C /home/ubuntu/app_name/shared/puma.rb --daemon )

4. 验证bundle的安装位置

最后可以确认下bundle确实安装在rbenv的2.5.0版本下:

rbenv local 2.5.0
gem list bundle

如果能看到bundle的版本信息,说明安装没问题,问题还是出在环境变量加载上。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:04:20