将django app迁移到多个服务器

时间:2015-02-03 17:30:45

标签: python django fabric

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

我可以选择一个主机作为主服务器并仅从主服务器运行migrate命令,但想知道是否有更优雅和适当的解决方案。

fabfile.py

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

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

1 个答案:

答案 0 :(得分:2)

您有三种选择。

您可以使用@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()功能相结合(如该部分的文档中所示)并制作{{1}为您调用其他任务的函数。看起来像这样:

deploy

叫做:

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