在实际问题出现之前,让我解释一下我们的架构。我们在服务器上使用git通过ssh并启用post-recieve
挂钩来设置代码。代码全部保存在单独的文件夹中。我们需要的是每当一个人将代码推送到服务器,它运行测试,迁移并在实时站点上更新它。目前,只要应用程序在模型中进行更新,它就会崩溃。
我们需要的是钩子脚本检测代码是否正确的方式,正确的意思是没有语法错误等,然后运行迁移并使用新代码更新当前应用程序而无需停机。我们正在使用nginx代理django应用程序,virtualenv for packages install from requirements.txt文件和gunicorn进行部署。
基线是,如果在任何时候出现故障,则应拒绝推送提交。如果所有测试都成功,它应该迁移到dbs并从新应用程序开始。
虽然我曾经使用过两个端口。一个运行主应用程序,另一个运行push提交。如果成功测试了推送代码,请将nginx上的端口更改为git应用程序并重新加载nginx。如果有的话,请讨论这个应用程序的缺点。还有一个示例提交后脚本,用于说明如何在发生故障时拒绝git commit。
答案 0 :(得分:2)
考虑使用fabric。 Fabric将允许您创建pythonic脚本,您可以在远程服务器中运行部署,创建新数据库并检查迁移是否安全。一旦所有好的,您可以在您的结构脚本中提及要在prod中部署,或者如果在结构中未提及发送电子邮件。
这让你的生活变得简单。