Fabric + buildout而不是Fabric + pip + virtualenv

时间:2013-09-18 23:04:38

标签: django deployment fabric buildout mezzanine

我最近开始使用基于django的CMS Mezzanine。我最近刚设法将Fabric配置为上传到我的主机webfaction.com,因为它更多涉及自动在共享主机上创建网站,我想自动化该过程。

总而言之,该系统使用Fabric进行配置文件的模板上传,使用pip + virtualenv来处理python包。

然而,我刚刚读到了关于buildout的内容,以及有些人如何发布它以进行部署,而其他人则没有。请参见此处:Django remote deployment with buildout and Fabric和此处:http://labs.creativecommons.org/2011/07/29/not-panicking-switching-to-virtualenv-for-deployment/

虽然我已经使用Google搜索并发现了大量关于buildout与pip的结果,但是关于buildout + fabric与pip + fabric的信息并不多。似乎buildout的一些功能(上传配置模板,处理主管)可以通过结构完成。有人能告诉我这两种方法的优点和缺点吗?

注意:由于我在可预见的未来使用共享主机,我不能sudo,它似乎可能需要许多现有的配方。

2 个答案:

答案 0 :(得分:17)

总结:Pip只安装python包,显然你需要做的更多。您可以在buildout中完成大部分额外工作,其优势在于buildout可以在本地和服务器上为您完成。面料必须少做这种方式。缺点是buildout的额外复杂性,所以如果有一些自定义结构命令对你来说足够了,那么这对你来说可能更合适。所以:权衡如何为你服务?

长版:

Pip擅长为您的项目安装python包。 Buildout擅长为项目设置几乎所有东西(包括python包)。这就是目标的不同。

现在......你将面料带入混合物中。使用pip + fabric,你可以从Fabric中调用pip来获取所有python包,然后使用fabric本身来设置其他所有东西。一个apache / nginx配置文件,创建几个目录(“var / log /”)等。

使用buildout + fabric,你已经配置了buildout来做很多事情,比如创建目录和从模板生成文件,设置主管和设置cronjob以在@reboot上启动主管。因此,fabfile必须做得更少。

所以...你交换责任。你可以在buildout中做的一切,你可以在面料做。您可以在buildout中执行的所有操作,您可以使用自定义python(或shell)脚本与pip结合使用(“阅读README以获取您必须执行的额外命令”)。

如果Buildout是项目不可或缺的一部分,那么它就是一个做事的好地方。想想这样:如果你需要在服务器上生产和在开发机器上本地生产,你最好在buildout中进行。否则,您还必须在本地计算机上运行结构。你可以做到,但是......

我自己将面料与buildout结合使用。 Buildout用于设置项目本身,围绕它的所有内容构建。一些例子:

  • 实际上是从生产服务器上的git克隆buildout。

  • Git pull(并检查正确的标签)。

  • 重启主管。

我的建议:在pypi上查看扩建食谱,看看它们是否对您有用。他们是否为您节省了足够的工作量,以便深入了解完整构建配置意味着的额外复杂性?如果你没有从buildout中获得足够的东西,那么你可能最好只使用fabric + pip和fabric文件中的一堆自定义命令。

答案 1 :(得分:3)

看看fabtools,它为你的fabfile增加了很多很好的构建功能。我和各种各样的人,主厨,木偶(胡桃木)Ansible和Fabric一起工作过。我发现Ansible非常适合那些陷入困境但又不想学习语言的devops团队,但就个人而言,一个组织良好的Fabric项目将获胜。