全面剖析Python的Django框架中的项目部署技巧第2/2页
from fabric.api import lcd, localdef deploy():
with lcd('/path/to/my/prod/area/'):
# With git...
local('git pull /my/path/to/dev/area/')
# With Mercurial...
local('hg pull /my/path/to/dev/area/')
local('hg update')
# With both
local('python manage.py migrate myapp')
local('python manage.py test myapp')
local('/my/command/to/restart/webserver')
这将会从开发主分支拉回(pull)变更,运行你实施的任何迁移,运行测试,并且重启你的web服务器。这些只需在命令行中的一条简单的命令。如果其中的一条命令失败了,脚本将会停止运行并报告发生的事情。一旦你修复了这个问题,无需再手工运行其余步骤。因为它们是幂等的,你只需重新运行部署命令,一切都将恢复正常。
(译注:idempotent 幂等,某一元运算为幂等的时,其作用在任一元素两次后会和其作用一次的结果相同。)
注意上面的代码是假设你部署在相同的机器上。如果不是这样的话,这个文件很可能相同,但是会使用Fabric的run函数来替代local。参见Fabric 文档 获取更多细节。
现在我们创建了fabfile.py,该怎样实际部署呢?很简单。只需运行:
$ fab prepare_deployment$ fab deploy
在技术层面,这些可以合并为一个单独的命令,但是我觉得最好明确的准备你的部署工作再部署它,因为这样就使你更关注于你正在做的事情。
建立单元测试
如果你但凡听说过我,可能就会知道我对自动测试非常着迷。无论如何,有太多的Django项目没有写任何测试。这是需要预先花费一点时间去做的事情,但是却给未来带来巨大的红利。如果你曾经使用print语句调试过你的应用,在恰当的地方用合适的测试,这样就将给你节省许多时间。
对于Django,Python的单元测试模块完全够用了。下面是一个app的一个最小的测试例子:
import datetimefrom django.test import TestCasefrom myapp.models import Postclass BlogPostTestCase(TestCase):
def setUp(self):
Post.objects.create(id=1,
title='Starting a Django 1.6 Project the Right Way',
date=datetime.datetime.now(),
category='Django')
Post.objects.create(id=2,
title='Python\'s Hardest Problem',
date=datetime.datetime.now(),
category='Python')
def test_posts_have_category(self):
"""Animals that can speak are correctly identified"""
first_post = Post.objects.get(id=1)
second_post = Post.objects.get(id=2)
self.assertEqual(first_post.category, 'Django')
self.assertEqual(second_post.category, 'Python')
你可以将这些代码写到名为test_<appname>.py的文件中,并将其放到app测试时所在的目录。为了为app运行这些测试,只需运行./manage.py test <appname>。我们创建的fabfile文件已经知道在部署前运行这些测试,所以不需要再做任何别的修改了。
享受你的新的Django应用程序
就是这些!你已经开始了实际的开发。现在真正的乐趣才会开始。只需记住:经常提交,测试一切,还有不要在你提供服务的地方书写代码。无论从现在起会发生什么,你肯定已经以正确的方式开始了一个Django1.6 项目!
相关文章
Python实现K-means聚类算法并可视化生成动图步骤详解
这篇文章主要介绍了Python实现K-means聚类算法并可视化生成动图,本文分步骤给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2021-05-05
Python使用wxPython和PyMuPDF提取PDF页面指定页数的内容
在本篇博客中,我们将探讨如何使用wxPython和PyMuPDF库创建一个简单的Bokeh应用程序,用于选择PDF文件并提取指定页面的内容,并将提取的内容显示在文本框中,需要的朋友可以参考下2023-08-08


最新评论