代码之家  ›  专栏  ›  技术社区  ›  Tony Arkles

Django+SVN+部署

  •  8
  • Tony Arkles  · 技术社区  · 14 年前

    我是版本控制的坚定支持者,并且正在着手一个Django项目。我以前做过一些,也尝试过一些不同的方法,但我还没有找到一个像样的结构,我真的觉得舒服。

    我想要的是:

    b) 最好不要将环境签入到版本控制中(像buildout或pip requirements.txt这样的东西可以用来设置环境)

    d) 一个合理的部署故事-最好整个部署环境可以由服务器上的脚本生成

    在我看来,似乎有人曾经这样做过,但许多小时的搜索都导致了半生不熟的解决方案,并没有真正解决所有这些问题。

    有没有想过我应该去哪里?

    2 回复  |  直到 14 年前
        1
  •  3
  •   eternicode    14 年前

    我在主目录(Linux上)中保存了一个项目/目录。当我需要启动一个新项目时,我会在projects/中创建一个名为dir的新目录(它足够描述该项目);它将成为该项目的一个新virtualenv(没有站点包)的根目录。

    如果有机会与其他开发人员共享项目(例如,一个工作项目),我会在repo根目录中包含一个pip requirements.txt。只有 项目要求

    对于django项目,我通常保留default settings.py,可能会做一些更改,并在最后添加本地设置约定( try: from local_settings import *; except ImportError: pass ). 我和其他开发人员的特定环境设置(例如,将django扩展和django调试工具栏添加到已安装的应用程序中)转到local_settings.py,即 已签入版本控制。为了帮助新开发人员,您可以提供该文件的模板local_settings.py.temp,或者其他不会用于任何其他目的的名称,但我发现这不必要地扰乱了repo。

    对于个人项目,如果我打算公开发布,通常会包含一个自述文件。在工作中,我们维护Trac环境和良好的沟通,以使新的开发人员在项目中加快速度。

    至于部署,正如rz所提到的,我听说fabric非常适合这种自动化的本地/远程脚本编写,尽管我自己并没有真正抓住机会去研究它。


    $ cd ~/projects/
    $ mkdir newproj
    $ cd newproj/
    $ virtualenv --no-site-packages .
    $ source bin/activate
    (newproj)$ pip install django django-debug-toolbar django-extensions
    ... installing stuff ...
    (newproj)$ django-admin.py startproject newproj
    (newproj)$ cd newproj/
    (newproj)$ hg init .; hg ci -A -m "Initial code"
    
        2
  •  4
  •   rz.    14 年前

    看看 fabric

    这就是我使用结构管理服务器/部署的方法: louis (它只是fabric命令的集合)。我保留一个 louisconf.py 与每个项目一起归档。

    我建议使用分布式VCS(git,hg,…)而不是svn。原因是分支的易用性允许多个部署方案。你可以,比如说, production staging 树枝。然后,您强制执行只有在按约定进行转移时才会合并到生产环境中。

    至于让开发人员快速入门,您可以使用pip和requirements.txt。我想这也意味着你在使用 virtualenv ,但如果不是的话,那就是第三块了。我建议你买一个基本的 README 到位。让每个加入项目的开发人员的第一个任务是更新 .

    让某人上船的粗略方法是让她签出代码,创建一个virtualenv,并安装需求。

    我建议你 settings.py 与sqlite3一起工作的文件,这样一个新的开发人员就可以快速使用(即在安装需求之后)。但是,如何管理不同的设置文件取决于项目布局。应该有 一组新开发人员使用的默认设置。