Skip to main content
 首页 » 编程设计

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

2024年08月26日27wayfarer

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

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

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