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

Heroku上PostgreSQL数据库无法运行,Rails应用部署遇阻

解决Rails部署Heroku时PostgreSQL数据库配置问题

嘿,我完全懂折腾数据库配置有多闹心——尤其是从SQLite转PostgreSQL部署到Heroku的时候,那些不起眼的小配置很容易卡壳。让我帮你一步步把这个问题搞定:

第一步:检查Gemfile的依赖配置

首先得确保SQLite只在开发和测试环境用,PostgreSQL作为生产环境的数据库依赖。你的Gemfile应该改成这样:

group :development, :test do
  gem 'sqlite3'
end

group :production do
  gem 'pg'
end

改完之后运行这个命令更新依赖:

bundle install --without production

记得把Gemfile和Gemfile.lock都提交到Git,这一步很关键——Heroku会依赖这两个文件来安装正确的数据库驱动。

第二步:修正database.yml配置

你提供的database.yml里生产环境的配置有问题:Heroku不会用你手动指定的数据库名,它会自动生成一个数据库并把连接信息放到DATABASE_URL环境变量里。所以正确的配置应该是这样:

default: &default
  adapter: postgresql
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  timeout: 5000

development:
  <<: *default
  database: myapp_development

test:
  <<: *default
  database: myapp_test

production:
  <<: *default
  url: <%= ENV['DATABASE_URL'] %>

解释下:生产环境用url: <%= ENV['DATABASE_URL'] %>来读取Heroku自动配置的连接信息,而不是硬写数据库名,这样Heroku才能正确建立数据库连接。

第三步:部署到Heroku的正确流程

  1. 先把所有修改提交到Git:
git add .
git commit -m "Switch to PostgreSQL for production, fix database config"
  1. 推送到Heroku:
git push heroku main
  1. 别忘了在Heroku上运行数据库迁移:
heroku run rails db:migrate

常见问题排查

如果还是不行,先看Heroku的日志找错误信息:

heroku logs --tail

常见的坑包括:

  • 没提交Gemfile.lock导致Heroku安装了错误的数据库驱动
  • 本地没安装PostgreSQL,开发环境测试时出错(如果本地想跑生产环境的话)
  • 迁移没运行,导致数据库表不存在

要是能看到具体的错误日志,就能更快定位问题啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:02:27