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

无法通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:52:17