无法通过mina deploy部署Rails应用,报错bundle: command not found
解决 Mina 部署时
bundle: command not found 的问题 你的问题核心是:Mina 虽然在日志里显示用了指定的 RVM 环境,但执行命令时没正确加载对应的 Ruby 环境,导致找不到 bundle 命令。我来帮你一步步排查解决:
1. 先在服务器上手动验证环境是否正常
登录到你的 Ubuntu 服务器,切换到部署用户(比如 rails 用户),执行以下命令:
rvm use ruby-2.4.0@marconPortfolio which bundle gem list bundler
- 如果
which bundle没有输出路径,说明这个 gemset 里没装 bundler,直接执行gem install bundler安装即可。 - 如果切换 RVM 环境时出错,先确认这个 gemset 是否存在:
rvm gemset list,不存在的话创建:rvm gemset create marconPortfolio。
2. 确保 RVM 在非交互式 Shell 中被加载
Mina 默认用非交互式非登录 Shell执行命令,而 RVM 通常只在登录 Shell 里自动加载。你需要修改服务器上的 Shell 配置文件:
- 编辑
~/.bashrc(如果用 Bash),在末尾添加:[[ -s "/usr/local/rvm/scripts/rvm" ]] && source "/usr/local/rvm/scripts/rvm" - 保存后执行
source ~/.bashrc生效,再重新测试which bundle是否能找到路径。
3. 调整 Mina 部署配置
在你的 deploy.rb 里做以下调整,确保 RVM 环境被正确加载:
方法一:明确指定 RVM 加载路径
set :rvm_use_path, '/usr/local/rvm/scripts/rvm' invoke :'rvm:use[ruby-2.4.0@marconPortfolio]' # 然后在执行 bundle 相关命令前,确保环境已加载 task :deploy do deploy do # ... 其他部署步骤 ... invoke :'bundle:install' end end
方法二:强制使用登录 Shell 执行命令
如果上面的方法不行,可以让 Mina 用登录 Shell 执行命令,这样会加载所有环境配置:
set :term_mode, nil # 关闭 Mina 的终端模式,允许使用登录 Shell # 或者在具体命令前加上 bash -lc command 'bash -lc "bundle install --deployment --without development test"'
4. 测试部署
修改完配置后,先执行 mina deploy --verbose 查看详细日志,确认 RVM 环境是否被正确加载,以及 bundle 命令的执行路径是否正确。
如果还是有问题,检查服务器上的部署用户是否有足够权限访问 RVM 和 gemset,避免权限导致的命令无法找到问题。
内容的提问来源于stack exchange,提问作者Felipe Marcon
相关产品推荐
相关产品推荐

