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

部署Rails应用到Dokku失败:Ruby Buildpack与Bundler问题

问题原因及解决方案

核心原因

  1. Bundler版本冲突:本地开发用Bundler 2.3.26,而Dokku上的Heroku Ruby Buildpack强制使用旧版Bundler 2.2.21。新版本Bundler生成的Gemfile.lock包含旧版无法识别的Rubygems内部结构定义(比如Gem::Source常量),导致部署时bundle install报错。
  2. Buildpack版本过旧:Heroku官方Ruby Buildpack的Bundler版本停留在2.2.21,无法适配Ruby 3.1.x搭配的Rubygems 3.3.22——后者对内部常量的组织做了调整,旧版Bundler调用时找不到对应常量。
  3. Gemfile.lock兼容性失效:之前临时修复(升级Ruby再回退)本质是重新生成了兼容旧Bundler的Gemfile.lock,但后续本地操作(如重新执行bundle install)又生成了不兼容的锁文件,导致故障复发。

可行解决方案

方案一:对齐本地与Buildpack的Bundler版本

  • 卸载本地高版本Bundler,安装Buildpack使用的2.2.21版本:
    gem uninstall bundler -v 2.3.26
    gem install bundler -v 2.2.21
    
  • 清理并重新生成兼容的锁文件:
    rm Gemfile.lock
    bundle install --without development:test
    bundle lock --add-platform x86_64-linux
    
  • 提交更新后的Gemfile.lock到代码仓库,重新部署到Dokku。

方案二:升级Buildpack版本

  • 替换为社区维护的新版本Ruby Buildpack,确保Bundler版本适配Ruby 3.1.x:
    dokku config:set YOUR_APP_NAME BUILDPACK_URL=https://github.com/heroku/heroku-buildpack-ruby.git#v242
    
    (可前往Buildpack仓库查看最新tag,选择包含Bundler 2.3+的版本)

方案三:在项目中锁定Bundler版本

  • 在项目根目录创建.bundle/config文件,添加以下内容:
    ---
    BUNDLED_WITH: "2.2.21"
    
  • 在Gemfile中添加Bundler版本锁定:
    gem 'bundler', '2.2.21'
    
  • 重新执行bundle install并提交修改,确保部署时Buildpack使用指定版本的Bundler。

方案四:临时应急修复

  • 进入Dokku应用容器,手动安装兼容的Bundler版本并执行依赖安装:
    dokku run YOUR_APP_NAME bash
    gem install bundler -v 2.3.26
    bundle install --without development:test
    
    注意:此方法仅为临时修复,重新部署后会失效,需配合其他方案彻底解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 19:20:24