更新Django实时Web应用程序的正确方法

3
在解决问题之前,让我先解释一下我们的架构。我们在服务器上通过ssh使用git,并启用了post-receive钩子来设置代码。所有代码都保存在一个单独的文件夹中。我们需要的是每当有人将代码推送到服务器时,就会运行测试、迁移并将其更新到现场站点。目前,每当应用程序在模型中进行更新时,它都会崩溃。
我们需要的是一种方法,使钩子脚本检测代码是否正确,正确的意思是没有语法错误等,然后在没有停机时间的情况下运行迁移并使用新代码更新当前应用程序。我们使用nginx代理django应用程序,virtualenv从requirements.txt文件安装包,以及gunicorn进行部署。
基本原则是,如果在任何时候发生故障,推送提交应该被拒绝。如果所有测试都成功,它应该对数据库进行迁移并开始使用新应用程序。
我想到的一个想法是为同一个端口使用两个端口。一个运行主要应用程序,另一个运行推送提交。如果推送的代码成功通过测试,则将nginx端口更改为git应用程序,并重新加载nginx。请讨论此应用程序的任何缺点。以及一个样本post-commit脚本,以展示如何在失败的情况下拒绝git提交。
1个回答

2
考虑使用 fabric。Fabric 可以让您创建 Pythonic 脚本,并在远程服务器上运行部署,创建一个新的数据库并检查迁移是否安全完成。一旦所有内容都正常,您可以在 Fabric 脚本中指定部署到生产环境,如果失败则在 Fabric 中发送电子邮件提醒。这使得您的生活更加简单。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接