将应用程序部署到新服务器(即数据库为空)时,如何正确地将数据库与Flask-Migrate同步?
当我已经有一些架构时,我已经将Flask-Migrate添加到项目中,所以我没有对所有create_table()
进行“初始”迁移。现在,当我在部署脚本中manage.py db upgrade
时,我得到relation "..." does not exist
。
是否有任何内置方法可以检测空数据库并运行'create_all()'而不是迁移?这就是Alembic的食谱suggests。由于我正在使用Flask-Migrate,我正在寻找一些处理迁移的统一方法。
答案 0 :(得分:3)
理想的解决方案是为您的数据库模式生成初始迁移,因为它是您开始使用Flask-Migrate和Alembic跟踪迁移的那一天。
如果你记得当时这样做,这很简单。只需创建一个单独的空数据库(保留真正的数据库),配置您的应用程序以使用空数据库,然后生成迁移。此迁移将具有整个架构。生成迁移后,删除空数据库并将配置恢复回真实数据库。
如果您已经有其他迁移,那么它会变得有点复杂。您将不得不返回要生成初始迁移的代码版本,然后按照上述过程生成它。最后,您需要在迁移列表中插入初始迁移作为第一个。查看一些迁移脚本,以确定每个迁移如何引用前一个迁移脚本。一些小的编辑应该让你开始运行。
如果这似乎工作太多,那么另一种选择是你使用db.create_all()
生成数据库直到最新的迁移,然后./manage.py db stamp head
告诉Alembic它应该考虑数据库更新。