将django项目部署到测试服务器的好方法?

时间:2009-12-29 11:44:25

标签: django deployment workflow

这是我目前的项目所特有的。但也许答案会揭示一些更通用的解决方案。

情况如下:

  • 我在Windows机器上开发了django项目
  • 我使用SVN提交到SVN存储库
  • 在开发时我使用django附带的开发服务器
  • 有一个测试服务器(apache)在其他地方运行,每当我完成一些事情,我需要通过WinSCP / Putty手动复制我的工作,并确保它适用于测试服务器
  • 测试服务器可供我们的测试人员使用,测试和报告错误

我想自动化这个过程,因为它非常痛苦。它涉及我导出整个存储库,复制到测试服务器,摆脱pyc文件,有时重启apache,使用正确的settings.py(通常是一些重命名)。

我希望测试服务器在每次SVN提交后自动检索新文件。我可以编写一个自定义脚本来完成所有这些工作,但有些东西告诉我,我可以使用一些易于使用的解决方案来改变我的工作流程以减少痛苦。

额外奖励。有一个设计器直接在测试服务器上的模板上使用HTML / CSS。我需要检查他是否进行了更改,然后将它们转移到我的计算机上,然后转移到SVN代表处。我的老板认为给他SVN访问太危险了。还有什么想法帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

<强>部署:

我认为以与生产相同的方式进行部署会更好。 Fabric是good solution

SVN方式:

如果您想以SVN方式进行,请创建一个名为testing的分支,一旦您拥有代码的工作版本并准备好测试将开发分支合并到测试分支。确保您拥有测试分支的权限,以限制每个人合并到测试分支。合并后,测试团队应该更新特定版本。

<强> pyc文件

没有必要手动删除pyc文件,你可以添加一个svn钩子,它可以忽略提交时的pyc文件。创建文件.svnignore

*.pyc

并运行此命令

svn -R propset svn:ignore -F .svnignore .

如果你已经陷入了编译文件版本的混乱局面,那么你可以做其中任何一件事。

find -name "*.pyc" -exec svn revert {} \;
find -name "*.pyc" -exec svn delete {} \;

Django设置文件

您可以设置环境变量,django可以通过该变量占用相应的设置文件。 Django set env

<强>设计

直接在测试服务器上工作的设计师不是奖励点。 :)令人头疼。在理想的环境中,没有人应该触摸测试服务器中的代码。为设计人员创建一个单独的分支,或者他可以提交所有开发人员可以合并的dev分支。

答案 1 :(得分:0)

一个选项是创建一个只读的svn用户,让它检查apache服务器上的svn存储库。然后做一个构建你运行'svn update'。您可以通过执行'svn status'来检查设计者是否修改了文件。

如果您的svn存储库与qa django实例位于同一台计算机上,则可以使用post-commit挂钩在每次提交后使用svn update,并在需要时跳转apache。见http://subversion.tigris.org/faq.html#website-auto-update