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

Heroku推送代码遇Bundler版本不一致问题求助

解决Heroku上Bundler版本不匹配的问题

我来帮你搞定这个Bundler版本不匹配的问题——你刚才执行的heroku run gem install bundler其实没法彻底解决问题,因为Heroku的dyno是临时容器,这次安装的Bundler会在dyno重启或者新实例启动时消失,得从部署流程层面来配置:

步骤1:先让本地Bundler版本和锁文件一致

首先在你的本地开发环境里,安装和Gemfile.lock里一致的Bundler版本(也就是1.16.1):

gem install bundler:1.16.1

这样本地推送代码时就不会再弹出版本不匹配的警告了。

步骤2:让Heroku部署时使用指定版本的Bundler

有两种可靠的方法来让Heroku在部署阶段就用正确的Bundler版本:

方法一:在Gemfile里指定Bundler版本

在你的Gemfile中添加一行,明确指定Bundler版本:

gem 'bundler', '1.16.1'

然后运行本地的bundle命令更新锁文件:

bundle install

最后把更新后的Gemfile和Gemfile.lock推送到Heroku:

git add Gemfile Gemfile.lock
git commit -m "Specify bundler version 1.16.1"
git push heroku main

方法二:通过Heroku环境变量指定版本

如果你不想修改Gemfile,可以直接设置Heroku的环境变量来指定Bundler版本:

heroku config:set BUNDLER_VERSION=1.16.1

然后重新推送代码触发部署(哪怕代码没改动,也可以用git push heroku main --force强制部署),Heroku就会在部署时自动安装指定版本的Bundler了。

为什么heroku run gem install bundler没用?

再给你解释下:heroku run是在一个临时运行的dyno里执行命令,这个dyno只是用来临时运行脚本,部署完成后启动的应用dyno不会继承这个安装的gem——Heroku的应用dyno是基于你的部署镜像创建的,只有在部署阶段安装的依赖才会被包含进去,所以必须通过上面两种方法让部署流程使用正确的Bundler版本。

内容的提问来源于stack exchange,提问作者Denis Bolomier

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:08:53