2011-05-21 44 views
8

我已經進入django一段時間了,我的大部分工作重點是學習如何在本地開發機器上開發和運行應用程序。現在我正在嘗試學習部署和發佈管理的最佳實踐。django發佈管理(分段,測試和生產)

我現在正在嘗試在github中設置我的代碼,然後以某種方式設置生產和臨時環境,以便以最小的影響推送更改。

在那裏我可以遵循哪些最佳做法?以及如何創建靈活的環境,以便您可以將代碼提交到客戶可以隨時查看工作的分段環境。

+0

您是否有虛擬化服務器可用?虛擬化讓事情變得更簡單。 – 2011-05-24 15:56:58

+0

「在那裏我可以遵循哪些最佳做法?」這很愚蠢。是。有很多最佳實踐。也許你有更多想問的東西? – 2011-05-24 18:51:06

+3

「是」顯然不會幫助任何人作爲SO的答案。如果你知道它們存在,我相信你可以通過提供這些實踐的鏈接來幫助提問者。 – 2011-05-24 19:12:09

回答

3

建立一個生產和臨時環境,在這裏我可以以最小的影響推動變化。

在某些情況下,這很容易,在某些情況下很難。

在Django中更改數據庫設計時,必須重做syncdb,並且在執行此操作時可能必須提取並重新加載現有數據。這很難。有些人使用south。我們手工完成,因爲south處理大多數情況下,而不是所有其中。

當您發佈新代碼(無數據庫更改)時,升級非常簡單。

  1. 當Apache啓動時,mod_wsgi開始。
  2. mod_wsgi開始時,它會讀取.wsgi文件以確定要執行的操作。
  3. .wsgi文件本質上定義了將調用您的應用程序的Django請求 - 應答處理循環。
  4. .wsgi文件的時間戳發生變化時,mod_wsgi重新讀取該文件。實際上,這將重新啓動您的應用程序。

你如何創建一個靈活的環境,使你可以提交你的代碼到一個臨時環境,你這樣做,客戶可以查看的工作。

這很簡單。

  1. 將您的應用程序代碼放入/opt/myapp/myapp-x.y/目錄結構中。 myapp-x.y名稱與git標籤名稱匹配。

  2. 暫存只是使用下一個版本的應用程序的Django配置。 /opt/myapp/myapp-2.3/。生產是當前版本。 /opt/myapp/myapp-2.2/。是的,有更舊的版本。

  3. 使用Apache <Location>指令將您的Apache配置定義爲擁有兩個(或更多)「位置」。一個位置是普通路徑的「生產」。另一個是與其他路徑「分段」。或者使用虛擬主機。或者任何讓你快樂的其他Apache事物。

現在你有兩個版本並行運行「位置」。

您可以(可能)重做數據庫,並將.wsgi文件更改爲指向應用程序的新版本來調整分段。

您可以通過(可能)重做數據庫以及更改.wsgi文件以指向應用程序的新版本來調整生產。

當你有可釋放的東西時,標記它。修復您的Python setup.pysetup.cfg以部署到下一個/opt/myapp/myapp-tag目錄。

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命令將安裝一個需求文件的點子,讓你指定並輕鬆地安裝所需依賴。我強烈建議將virtualenv與django-startproject結合使用。關於在Django中使用virtualenv的好教程可以在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. 

從此,你可以用布變更部署到生產服務器。