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

升级Ruby版本后Heroku部署Rails应用失败求助

Heroku部署Rails应用失败(Ruby升级到3.1.2后)解决方案

问题分析

部署时触发两个核心错误:

  • Rails couldn't infer whether you are using multiple databases from your database.yml and can't generate the tasks for the non-primary databases. If you'd like to use this feature, please simplify your ERB.
  • Psych::BadAlias: Unknown alias: default

这两个问题均与Ruby 3.1.x的兼容性相关:Ruby 3.0+升级了Psych库,对YAML解析规则更严格;同时Rails对database.yml中的ERB复杂度判断标准更敏感。

解决方案

1. 简化database.yml的ERB逻辑

检查config/database.yml文件,移除复杂的ERB嵌套或动态生成逻辑,让Rails能清晰识别数据库配置结构:

  • 删除不必要的条件判断、循环等ERB代码,仅保留生产环境(Heroku使用的环境)的明确配置项。
  • 避免用ERB生成复杂的数据库连接参数,直接使用Heroku提供的DATABASE_URL环境变量(Rails会自动读取该变量)。

2. 修复YAML别名引发的Psych错误

Ruby 3.0+的Psych库默认禁用了YAML别名(&定义别名、*引用别名的写法),若配置文件中使用了该写法,直接展开别名即可:

  • 错误写法示例:
    default: &default
      adapter: postgresql
      encoding: unicode
    
    production:
      <<: *default
      url: <%= ENV['DATABASE_URL'] %>
    
  • 修改后写法:
    production:
      adapter: postgresql
      encoding: unicode
      url: <%= ENV['DATABASE_URL'] %>
    

3. 升级Webpacker版本

Webpacker 4.3.0与Ruby 3.1.x存在兼容性问题,建议升级到Webpacker 4.x的最新稳定版(如4.4.0),或直接升级到Webpacker 5.x(需确保你的Rails 6.0版本支持):

  • 修改Gemfile:gem 'webpacker', '~> 4.4'
  • 运行bundle update webpacker,将更新后的Gemfile和Gemfile.lock提交到代码仓库。

4. 额外检查项

  • 确认Gemfile中Ruby版本指定正确:ruby '3.1.2'
  • 本地提前验证资产编译:运行rake assets:precompile RAILS_ENV=production,提前发现编译错误。
  • 清理Heroku缓存:执行heroku repo:purge_cache后重新部署。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 18:46:17