Fabric 和 Django 部署场景
Posted
技术标签:
【中文标题】Fabric 和 Django 部署场景【英文标题】:Fabric and Django deployment scenario 【发布时间】:2014-07-21 14:51:07 【问题描述】:我的部署方案涉及典型的 Django 设置,但在多个服务器上运行。基本上,我上传源代码,执行几个构建步骤(编译 .pyc 文件,collectstatic 等),然后运行syncdb
和migrate
,最后重新加载 apache2。
我的问题是我将代码部署到 4-5 台服务器上,并且计划在未来部署更多,并且部署需要很长时间(每台服务器超过一分钟)。部署过程中的几乎所有步骤都可以并行完成,除了 syncdb/migrate。有没有办法使用 Fabric 只在其中一台机器上运行那些任务(数据库服务器与其他服务器是分开的),并并行运行其余任务?
【问题讨论】:
fabric.readthedocs.org/en/1.3.0/usage/parallel.html#decorators 该示例是否解决了您要执行的操作? 有点。理想情况下,我想要single
或 once
装饰器之类的东西。基本上,多次运行某些任务是没有意义的。我只需要它们在任何主机上每次部署运行一次。
【参考方案1】:
您是否尝试过为每个任务和另一个任务创建一个函数来调用它们?
例子:
@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()
...
【讨论】:
以上是关于Fabric 和 Django 部署场景的主要内容,如果未能解决你的问题,请参考以下文章