将Rails应用部署到Fly.io时出现PG::UndefinedTable错误:trips表不存在
Rails部署Fly.io后PostgreSQL表不存在问题解决
1. 生产环境未执行数据库迁移
本地的rails db:reset只作用于本地开发/测试数据库,Fly.io的生产库是独立的,必须远程执行迁移:
- 执行
fly ssh console进入远程应用控制台 - 在控制台内运行
rails db:migrate RAILS_ENV=production - 也可以直接用Fly命令快速执行:
fly run rails db:migrate
2. 修正database.yml生产环境配置
你的production配置继承了default中的host: localhost,但Fly.io的PostgreSQL数据库并非本地主机,正确做法是使用Fly自动注入的DATABASE_URL环境变量:
修改production段配置为:
production: <<: *default url: <%= ENV["DATABASE_URL"] %>
同时移除production段内单独的database、username、password配置,避免与DATABASE_URL的连接信息冲突。
3. 确认Fly.io数据库实例关联状态
- 执行
fly postgres list查看是否已创建PostgreSQL实例 - 若未创建,先执行
fly postgres create创建实例,再用fly postgres attach <你的postgres实例名>关联到应用
4. 验证生产数据库表结构
- 执行
fly pg connect进入远程数据库控制台 - 输入
\dt查看所有表,若没有trips表,说明迁移未成功,检查迁移文件语法或迁移执行日志排查问题
内容的提问来源于stack exchange,提问作者João Gabriel Dal Forno
相关产品推荐
相关产品推荐

