Fabric和Django部署场景

Fabric和Django部署场景,django,fabric,Django,Fabric,我的部署场景涉及典型的Django设置,但在多台服务器上运行。基本上,我上传源代码,执行几个构建步骤编译.pyc文件、collectstatic等,然后运行syncdb并迁移,最后重新加载apache2 我的问题是,我将代码部署到4-5台服务器上,并且计划在未来部署更多的代码,而部署每台服务器所需的时间很长,超过一分钟。除了syncdb/migrate之外,部署过程中的几乎所有步骤都可以并行完成。有没有一种方法可以使用Fabric只在DB服务器与其他服务器分开的一台机器上运行这些任务,并并行运行

我的部署场景涉及典型的Django设置,但在多台服务器上运行。基本上,我上传源代码,执行几个构建步骤编译.pyc文件、collectstatic等,然后运行syncdb并迁移,最后重新加载apache2


我的问题是,我将代码部署到4-5台服务器上,并且计划在未来部署更多的代码,而部署每台服务器所需的时间很长,超过一分钟。除了syncdb/migrate之外,部署过程中的几乎所有步骤都可以并行完成。有没有一种方法可以使用Fabric只在DB服务器与其他服务器分开的一台机器上运行这些任务,并并行运行其他任务?

您是否尝试过为每个任务创建一个函数,然后再创建一个任务来调用它们

例如:

@task
@parallel
copy_files():
    run('cp *')
    ...

@task
@parallel
restart_apache():
    run('/etc/init.d/httpd restart')
    ...

@task
syncdb_app():
    run('python manage.py syncdb')
    ...

@task
deploy():
    copy_files()
    restart_apache()
    syncdb_app()
    ...

这个例子说明了你想做什么吗。理想情况下,我想要像单身或曾经的装饰师一样的东西。基本上,多次运行某些任务是没有意义的。我只需要它们在任何主机上每次部署运行一次。