【问题标题】:Fabric + buildout as opposed to Fabric + pip + virtualenvFabric + buildout 相对于 Fabric + pip + virtualenv
【发布时间】:2013-09-18 23:04:37
【问题描述】:

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

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

但是,我最近刚读到有关构建的文章,以及一些人如何发誓要部署它,而另一些人则不然。见这里: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 的信息并不多。似乎构建的一些功能(上传配置模板,处理主管)可以通过结构完成。谁能告诉我这两种方法的优缺点?

注意:由于我在可预见的未来使用共享主机,所以我不能 sudo,这似乎需要对许多现有配方进行扩展。

【问题讨论】:

  • 目前有一个关于这个问题的 close-this-question(“过于基于意见”)建议。不过,我认为这个问题很好。与 Fabric 的结合意味着常规的构建/点子权衡是不同的。答案可以解决权衡问题。

标签: django deployment fabric buildout mezzanine


【解决方案1】:

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

长版:

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

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

使用 buildout+fabric,您将已经配置 buildout 来执行很多操作,例如创建目录和从模板生成文件以及设置主管和设置 cronjob 以在 @reboot 上启动主管。所以 fabfile 必须做的更少。

所以……你们互换职责。您可以在构建中做的所有事情,都可以在织物中做。您可以在 buildout 中做的所有事情,您都可以使用自定义 python(或 shell)脚本结合 pip(“阅读 README 以了解您必须执行的额外命令”)。

如果 Buildout 是您项目的一个组成部分,那么它是一个很好的地方。可以这样想:如果您在服务器上的生产和开发机器上的本地都需要它,那么最好在构建中进行。否则,您也必须在本地机器上运行 fabric。你可以做到,但是......

我自己将织物与扩展结合使用。 Buildout 用于设置项目本身,以及围绕它的所有内容的结构。一些例子:

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

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

  • 正在重新启动主管。

我的建议:在 pypi 上查找构建食谱,看看它们是否适合您。它们是否为您节省了足够的工作量,从而值得深入研究完整扩展配置意味着的额外复杂性?如果你没有从构建中得到足够的东西,你最好只使用 fabric+pip 和你的 fabric 文件中的一堆自定义命令。

【讨论】:

  • 注意:我在博客reinout.vanrees.org/weblog/2013/09/19/fabric-pip-buildout.html 上对这个问题的回答略有不同,但想法是一样的。
  • 感谢您的回答!我很好奇 - 你会如何回应我发布的第二个链接(creativecommons)中使用 buildout 的批评(对我来说突出的是,如果它在任何时候失败,它会破坏你的整个环境)?
  • 一个构建配置有多个部分。如果某个部分发生故障,那么您在该部分中安装的任何内容都可能会损坏。取决于你在做什么。一些食谱/零件首先删除旧的东西,真的,然后再安装新的东西。我想 pip/virtualenv 也会以不同的方式发生同样的情况。与未下载的软件包相同。说实话,pip/virtualenv 通过一些手动步骤更容易破解/规避。这些手动步骤正是您不希望在您的生产机器上执行的操作:您可以使用它们来节省您的时间,但您还记得一个月后的临时黑客吗?
  • 读完这篇文章后我真的很兴奋,但是我去 buildout.org 之后,现在我很困惑,也许很失望。该项目似乎完全被放弃了。从主页链接的介绍性视频托管在 Google 视频上,该视频几年前就关闭了。看起来上次有人接触文档是在 3 年前(请参阅 svn.zope.org/buildout-w.... 我喜欢 Buildout 的想法,但我现在觉得使用它并不省钱,因为它看起来像废弃软件。我错过了什么吗? ? 如果没有,有什么好的选择吗?
  • 它不是废弃软件,而是从 zope 的 svn 转移到 github:github.com/buildout/buildout :-) 有关活动,请参阅 github.com/buildout/buildout/graphs/contributors。坏消息是 buildout.org 页面可以很好地反映 buildout 文档的状态。不过,pypi 页面有很多信息。最好的选择:查看现有的项目并复制/粘贴它们。这是最方便的入门方式。
【解决方案2】:

看看fabtools,它为您的 fabfile 添加了许多不错的构建功能。我曾与各种厨师、Puppet(核桃大锤)Ansible 和 Fabric 合作过。我发现 Ansible 非常适合陷入困境但不想学习一门语言的 devops 团队,但就个人而言,组织良好的 Fabric 项目会胜出。

【讨论】:

    猜你喜欢
    • 2011-10-15
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    • 2012-06-23
    • 1970-01-01
    • 1970-01-01
    • 2017-06-05
    • 2016-04-30
    相关资源
    最近更新 更多