如何在Heroku部署的Rails生产环境添加新数据表且不丢失现有数据
嘿,作为Rails新手能搞定部署还敢折腾数据库,已经超棒啦!别担心,同步新表到生产环境完全不用删现有数据——这正是Rails迁移(Migrations)这个功能设计的初衷呀。我给你一步步拆解正确的操作:
同步新表到Heroku生产环境的正确步骤
1. 确认迁移文件的正确性
你在开发环境添加新表时,Rails已经自动在db/migrate目录下生成了对应的迁移文件(文件名格式类似20240520123456_create_xxx_table.rb)。打开这些文件检查一下,确保内容是创建新表的逻辑(比如create_table :xxx do |t| ... end),没有误写删除现有表的操作。
2. 提交迁移文件到Git
先把这些迁移文件加入版本控制:
git add db/migrate/20240520123456_create_xxx_table.rb db/migrate/20240520123457_create_yyy_table.rb git commit -m "Add new tables: xxx and yyy"
3. 推送代码到Heroku
把包含迁移文件的代码推送到Heroku远程仓库:
git push heroku main
(如果你的主分支是master,就换成git push heroku master)
4. 在Heroku上执行迁移
这是最关键的一步!运行下面的命令,Rails会在生产环境安全执行迁移——只会创建新表,绝对不会触碰现有表的数据:
heroku run rails db:migrate
5. 验证迁移结果
可以登录Heroku的数据库控制台确认新表是否创建成功:
heroku run rails dbconsole
进入控制台后,用\dt(PostgreSQL命令)查看所有表,就能看到新添加的表啦。
重要提醒
- 绝对不要在生产环境运行
rails db:reset或rails db:drop,这些命令会直接删除所有数据! - 以后任何数据库结构的修改(加表、加字段、改字段类型),都要用迁移来完成,不要手动修改数据库或删表重建。
- 如果迁移过程中报错,可以用
heroku run rails db:rollback回滚最后一次迁移,修复问题后再重新执行db:migrate。
内容的提问来源于stack exchange,提问作者stevec
相关产品推荐
相关产品推荐

