全面剖析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')
這將會從開發(fā)主分支拉回(pull)變更,運行你實施的任何遷移,運行測試,并且重啟你的web服務(wù)器。這些只需在命令行中的一條簡單的命令。如果其中的一條命令失敗了,腳本將會停止運行并報告發(fā)生的事情。一旦你修復(fù)了這個問題,無需再手工運行其余步驟。因為它們是冪等的,你只需重新運行部署命令,一切都將恢復(fù)正常。
(譯注:idempotent 冪等,某一元運算為冪等的時,其作用在任一元素兩次后會和其作用一次的結(jié)果相同。)
注意上面的代碼是假設(shè)你部署在相同的機器上。如果不是這樣的話,這個文件很可能相同,但是會使用Fabric的run函數(shù)來替代local。參見Fabric 文檔 獲取更多細節(jié)。
現(xiàn)在我們創(chuàng)建了fabfile.py,該怎樣實際部署呢?很簡單。只需運行:
$ fab prepare_deployment$ fab deploy
在技術(shù)層面,這些可以合并為一個單獨的命令,但是我覺得最好明確的準備你的部署工作再部署它,因為這樣就使你更關(guān)注于你正在做的事情。
建立單元測試
如果你但凡聽說過我,可能就會知道我對自動測試非常著迷。無論如何,有太多的Django項目沒有寫任何測試。這是需要預(yù)先花費一點時間去做的事情,但是卻給未來帶來巨大的紅利。如果你曾經(jīng)使用print語句調(diào)試過你的應(yīng)用,在恰當?shù)牡胤接煤线m的測試,這樣就將給你節(jié)省許多時間。
對于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>。我們創(chuàng)建的fabfile文件已經(jīng)知道在部署前運行這些測試,所以不需要再做任何別的修改了。
享受你的新的Django應(yīng)用程序
就是這些!你已經(jīng)開始了實際的開發(fā)?,F(xiàn)在真正的樂趣才會開始。只需記?。航?jīng)常提交,測試一切,還有不要在你提供服務(wù)的地方書寫代碼。無論從現(xiàn)在起會發(fā)生什么,你肯定已經(jīng)以正確的方式開始了一個Django1.6 項目!
相關(guān)文章
python中copy()與deepcopy()的區(qū)別小結(jié)
接觸python有一段時間了,一直沒有系統(tǒng)的學習過,也對copy,deepcoy傻傻的分不清,故抽出時間來理一下。 下面這篇文章主要給大家介紹了關(guān)于python中copy()與deepcopy()的區(qū)別的相關(guān)資料,需要的朋友可以參考下2018-08-08
Python實現(xiàn)K-means聚類算法并可視化生成動圖步驟詳解
這篇文章主要介紹了Python實現(xiàn)K-means聚類算法并可視化生成動圖,本文分步驟給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-05-05
python實現(xiàn)12306搶票及自動郵件發(fā)送提醒付款功能
本文給大家分享python實現(xiàn)12306搶票及自動郵件發(fā)送提醒付款功能,文章沒有給大家貼出完整代碼,只是技術(shù)交流,感興趣的朋友跟隨腳本之家小編一起看看吧2018-03-03
Python使用wxPython和PyMuPDF提取PDF頁面指定頁數(shù)的內(nèi)容
在本篇博客中,我們將探討如何使用wxPython和PyMuPDF庫創(chuàng)建一個簡單的Bokeh應(yīng)用程序,用于選擇PDF文件并提取指定頁面的內(nèi)容,并將提取的內(nèi)容顯示在文本框中,需要的朋友可以參考下2023-08-08

