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