同时在多个数据库上运行django迁移

时间:2015-12-10 08:32:04

标签: python django django-migrations

我们正在用django开发一个b2b应用程序。对于每个客户端,我们启动一个新的虚拟服务器机器和一个数据库。因此,每个客户端都有一个单独的应用程序安装。 (我们这样做是因为根据我们的应用程序的性质,一个客户可能需要在特定时间高度使用资源,并且我们不希望一个客户的状态影响其他人)

这些安装中的每一个都绑定到中央存储库。如果我们更新应用程序代码,当我们推送到主分支时,所有安装都会检测到这一点,提取最新版本的代码并重新启动应用程序。

如果我们另一方面更新数据库模式,目前,我们需要通过逐个连接到每个数据库实例来手动运行迁移(settings.py文件从不在repo中的外部文件读取数据库设置,我们在安装时手动添加此文件)。

我们可以自动化这个过程吗?即,如果给出一个数据库列表,是否可以使用一个命令在这些数据库上运行迁移?

2 个答案:

答案 0 :(得分:3)

  

如果我们更新应用程序代码,当我们推送到主分支时,   所有安装检测到这一点,拉出最新版本的代码和   重启应用程序。

我假设您有某种自动化来提取代码并重新启动Web服务器。您只需将迁移添加到此自动化过程即可。每个服务器的settings.py都会从外部文件中读取数据库详细信息并为您运行迁移。

所以流程应该是这样的:

  • 拉代码
  • 迁移
  • 收集静态
  • 重新启动网络服务器

答案 1 :(得分:1)

首先,我真的很(非常努力)找到一种方法来启动一个脚本,就像masnun在客户端建议的那样,真的很难。

其次,如果这不起作用,那么我尝试以下方法:

  • 在本地计算机上配置设置变量DATABASES
  • 中的所有客户端数据库
  • 确保您可以连接到所有客户端数据库,这可能需要一些摆弄
  • 然后你运行" manage.py migrate"使用额外标志 - database = mydatabase (其中" mydatabase"是配置中提供的句柄)的进程,用于EACH客户端数据库

我没试过这个,但我不明白为什么它不起作用......