【问题标题】:django release management (staging, testing and production) [closed]django 发布管理(登台、测试和生产)[关闭]
【发布时间】:2011-05-21 20:28:00
【问题描述】:

我接触 django 已经有一段时间了,我的大部分注意力都集中在学习如何在我的开发机器上本地开发和运行应用程序。现在我正在尝试学习部署和发布管理的最佳实践。

我现在正在尝试在 github 中设置我的代码,然后以某种方式设置一个生产和暂存环境,我可以在其中以最小的影响推送更改。

有没有我可以遵循的最佳实践?以及如何创建一个敏捷环境,使您可以将代码提交到临时环境中,客户可以在其中查看您所做的工作。

【问题讨论】:

  • 您是否有可用的虚拟化服务器?有了虚拟化,事情就简单多了。
  • “有没有我可以遵循的最佳实践?”这很愚蠢。是的。有很多最佳实践。或许你还有什么想问的?
  • “是”显然不能帮助任何人作为 SO 的答案。如果您知道这些做法的存在,我相信您可以通过提供这些做法的链接来帮助提问者。
  • 抱歉,我的回复迟了,我已经离开桌面好几天了。 S.Lott 为我提供了我一直在寻找的答案,现在我有了更清晰的认识,我可以根据他的意见开始进行更多研究。谢谢大家,
  • @Gweebz:我的观点是,问一个是-否的问题很难确定真正需要什么。链接?教程?建议?建议?细节?是-否问题没有价值,因为它只会引出后续问题。我不喜欢猜测后续问题,而是更喜欢人们提出一个反映他们真正需要知道的问题的正确问题。这个问题可以大幅度改进。

标签: django agile


【解决方案1】:

我建议查看lincoln loop 中记录的流程。你可以直接访问他们的 github 仓库django-startproject。基本上,django-startproject 创建的工作流将开发、测试和生产分开。您使用

运行开发服务器

manage.py runserver 0.0.0.0:8000 --settings=<Project>.conf.dev.settings

然后你用

执行测试

manage.py test --settings=<Project>.conf.test.settings

django-startproject 将为 pip 安装一个需求文件,允许您指定并轻松安装必要的依赖项。我强烈建议将 virtualenv 与 django-startproject 结合使用。可以在here 找到一个很好的关于在 Django 中使用 virtualenv 的教程。

django-startproject 还包括一个准系统 fabric.py 脚本,有助于在远程/云服务器上进行部署。

当然,以上所有内容都将受到 svn/hg/git/whatever 的源代码控制。

因此,在基本 ubuntu/debian 服务器上的部署过程将是:

sudo apt-get install python-setuptools python-dev build-essential
sudo easy_install -U pip
sudo pip install -U virtualenv
mkdir -p <path>/python-environments
cd <path>/python-environments
# Create the virtual env
virtualenv --no-site-packages --distribute <my project dir>
cd <my project dir>
git clone https://github.com/<my project>.git
cd <my project>
# Install dependencies
pip install -r requirements.pip
# Run tests, setup apache, etc.

从那时起,您可以使用 Fabric 将更改部署到您的生产服务器。

【讨论】:

    【解决方案2】:

    设置一个生产和暂存环境,我可以在其中以最小的影响推动更改。

    这在某些情况下很容易,在某些情况下很难。

    当您在 Django 中更改数据库设计时,您必须重做 syncdb,并且您可能必须在执行此操作时提取并重新加载现有数据。这很难。有些人使用south。我们是手工完成的,因为south 处理了大多数情况,而不是全部

    当您发布新代码(不更改数据库)时,升级非常简单。

    1. 当 Apache 启动时,mod_wsgi 启动。
    2. mod_wsgi 启动时,它会读取.wsgi 文件以确定要做什么。
    3. .wsgi 文件——本质上——定义了将调用您的应用程序的 Django 请求-回复处理循环。
    4. .wsgi 文件的时间戳更改时,mod_wsgi 会重新读取该文件。这实际上会重新启动您的应用程序。

    您如何创建一个敏捷环境,以便您可以将代码提交到临时环境中,客户可以在其中查看您所做的工作。

    这很容易。

    1. 将您的应用程序代码放入/opt/myapp/myapp-x.y/ 目录结构中。 myapp-x.y 名称与 git 标签名称匹配。

    2. Staging 只是使用应用程序的下一个版本的 Django 配置。 /opt/myapp/myapp-2.3/。生产是当前版本。 /opt/myapp/myapp-2.2/。是的,有旧版本。

    3. 使用 Apache &lt;Location&gt; 指令将您的 Apache 配置定义为具有两个(或更多)“位置”。一个位置是具有普通路径的“生产”。另一个是与其他路径“分期”。或者使用虚拟主机。或者任何其他让你开心的 Apache 东西。

    现在您的两个版本都在并行“位置”运行。

    您可以通过(也许)重做数据库并更改 .wsgi 文件以指向应用程序的新版本来调整暂存。

    您可以通过(也许)重做数据库并更改 .wsgi 文件以指向您的应用程序的新版本来调整生产。

    当你有一些可发布的东西时,标记它。修复 Python setup.pysetup.cfg 以部署到下一个 /opt/myapp/myapp-tag 目录。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-26
      • 2012-03-12
      • 2020-09-26
      • 2011-11-03
      相关资源
      最近更新 更多