将 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
我想使用 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