我已经进入django一段时间了,我最关注的是学习如何在我的开发机器上本地开发和运行应用程序。现在我正在尝试学习部署和发布管理的最佳实践。
我现在正在尝试在github中设置我的代码,然后以某种方式设置一个生产和暂存环境,在那里我可以以最小的影响推送更改。
我可以遵循最佳做法吗?以及如何创建一个敏捷环境,您可以将代码提交到临时环境中,客户可以在此环境中查看工作。
答案 0 :(得分:4)
我建议按照lincoln loop中的说明检查流程。您可以在django-startproject直接访问他们的github回购。基本上,django-startproject创建的工作流将隔离开发,测试和生产。您使用
运行开发服务器 manage.py runserver 0.0.0.0:8000 --settings=<Project>.conf.dev.settings
并使用
执行测试 manage.py test --settings=<Project>.conf.test.settings
django-startproject将为pip安装一个需求文件,允许您指定并轻松安装必要的依赖项。我强烈建议将virtualenv与django-startproject结合使用。有关使用virtualenv和Django的好教程可以找到here。
django-startproject还包括一个准系统fabric.py脚本,可帮助在远程/云服务器上进行部署。
当然以上所有内容都将使用svn / hg / git / whatever进行源代码控制。
所以在一个简单的ubuntu / debian服务器上的部署过程将是:
sudo apt-get install python-setuptools python-dev build-essential
sudo easy_install -U pip
sudo pip install -U virtualenv
mkdir -p <path>/python-environments
cd <path>/python-environments
# Create the virtual env
virtualenv --no-site-packages --distribute <my project dir>
cd <my project dir>
git clone https://github.com/<my project>.git
cd <my project>
# Install dependencies
pip install -r requirements.pip
# Run tests, setup apache, etc.
从那时起,您可以使用fabric将更改部署到生产服务器。
答案 1 :(得分:3)
设置一个生产和登台环境,我可以在最小的影响下推动更改。
在某些情况下这很容易,在某些情况下很难。
在Django中更改数据库设计时,必须重做syncdb,并且在执行此操作时可能必须提取并重新加载现有数据。这很难。有些人使用south
。我们是手工完成的,因为south
处理了大多数情况,而不是所有。
当您发布新代码(无数据库更改)时,升级非常简单。
mod_wsgi
启动。 mod_wsgi
启动时,它会读取.wsgi
个文件以确定要执行的操作。.wsgi
文件 - 本质上 - 定义将调用您的应用程序的Django请求 - 回复处理循环。.wsgi
文件的时间戳发生变化时,mod_wsgi
会重新读取该文件。实际上,这将重新启动您的应用程序。如何创建一个敏捷环境,您可以将代码提交到临时环境中,客户可以在此环境中查看工作。
这很简单。
将您的应用程序代码放入/opt/myapp/myapp-x.y/
目录结构中。 myapp-x.y
名称与git标记名称匹配。
暂存只是使用app的下一个版本的Django配置。 /opt/myapp/myapp-2.3/
。生产是当前版本。 /opt/myapp/myapp-2.2/
。是的,有旧版本。
使用Apache <Location>
指令将Apache配置定义为具有两个(或更多)“位置”。一个位置是普通路径的“生产”。另一个是与其他路径“分期”。或者使用虚拟主机。或任何让你开心的Apache事物。
现在您有两个版本并行运行“locations”。
您可以通过(可能)重做数据库来调整暂存,并将.wsgi
文件更改为指向应用程序的新版本。
您可以通过(可能)重做数据库来调整生产,并将.wsgi
文件更改为指向应用程序的新版本。
当你有可释放的东西时,请标记它。修复Python setup.py
和setup.cfg
以部署到下一个/opt/myapp/myapp-tag
目录。