将 django 应用程序迁移到多个服务器

Migrate django app to multiple servers

我想使用 fabfile 将 django 应用程序迁移到多个主机。问题是所有主机都连接到同一个数据库(在另一台服务器中)并且每个主机的 migrate 命令 运行s。

我可能 select 一台主机作为 master 并且 运行 仅从 master 迁移命令,但想知道是否有更优雅和更合适的解决方案。

fabfile.py

def migrate():
    virtualenv('python manage.py makemigrations')
    virtualenv('python manage.py migrate')

def prod():
    env.user = 'myuser'
    env.hosts = ['X1', 'X2']

你有大约三个选项。

有一个 @runs_once 装饰器可供您使用。记录 here。您只需执行以下操作:

@runs_once
def migrate():
    virtualenv('python manage.py makemigrations')
    virtualenv('python manage.py migrate')

def prod():
    env.user = 'myuser'
    env.hosts = ['X1', 'X2']``

调用方式如下:

$ fab -R myRole migrate update

您也可以只应用特定角色以用于显示的所述任务 here:

from fabric.api import run, roles

env.roledefs = {
    'db': ['db1'],
    'web': ['web1', 'web2', 'web3'],
}

@roles('db')
def migrate():
    # Database stuff here.
    pass

@roles('web')
def update():
    # Code updates here.
    pass

调用方式如下:

$ fab migrate update

如果你想获得更细粒度的那些相同的函数可以与 execute() 函数结合使用(如该部分的文档所示)并创建一个 deploy 函数来调用那些给你的其他任务。看起来像这样:

def deploy():
    execute(migrate)
    execute(update)

被称为:

 $ fab deploy