2011-11-17 75 views
1

短缺問題1
什麼構成Django's documentation大約1/2的通過方式定義生產環境?Django內置的Web服務器:使用和可靠性問題

短缺問題2
有管理界面破壞數據庫,如果多人同時訪問數據庫的任何記錄的案件?

背景
我已經使用的Django作爲ORM用於PostgreSQL服務器。由於該應用程序的主要用途是一個ORM,因此該應用程序在客戶端計算機上運行以與遠程服務器通信。到目前爲止,要訪問管理Web界面,我運行了python manage.py runserver,它在我的本地主機(127.0.0.1:8000)上託管一個小型Web服務器來訪問它。

此方法的工作原理除了我需要修復數據條目或查找某些東西時,我必須位於安裝了/運行應用程序的計算機上。我的解決方法是從Ubuntu服務器啓動應用程序的管理界面,併爲其提供一個真實的IP地址。請注意,真實IP地址位於本地Intranet上,位於防火牆後面。我測試了兩個沒有問題的同時訪問,沒有發現任何錯誤,我通過Ubuntu的Upstart將這個python進程添加爲系統進程。

長期目標是安裝Apache和Mod_WSGI來託管應用程序。然而,在這樣一個小團隊中(任何時候都有3人),是否有必要經歷這個麻煩?請注意,如果我們向外界開放這個問題,這個問題就變得沒有實際意義,Apache是​​必須的。

回答

2

如果你沒有使用開發服務器來開發django項目,這聽起來像生產給我。用Apache和mod WSGI部署你的應用程序是否值得麻煩?這取決於你,但是Django開發人員的建議非常明確。

請勿在生產環境中使用本服務器。它沒有經過安全審計或性能測試。 (這就是它是如何會留下來。我們是在做Web框架,而不是Web服務器,所以提高了該服務器能夠處理生產環境是Django的範圍之外的業務。)

對於你的第二個問題,我不確定'腐敗'是什麼意思。如果兩個用戶同時更改同一個對象,則要保存的第二個用戶可能會無意中還原第一個用戶的更改:

考慮兩位用戶編輯相同的Person。第一個用戶更改名字,然後第二個用戶更改第二個名字。由於第二個用戶在第一個用戶保存之前加載了更改頁面,因此第一個名稱會更改回Joe。

| Description | First Name | Second Name | 
============================================= 
| initial value | Joe  | Smith  | 
| first user | Joseph  | Smith  | 
| second user | Joe  | Bloggs  | 
============================================= 
0

你是否在談論由於兩個獨立的django實例在同一個數據庫上運行而導致的腐敗?如果是這樣的話,我肯定會發現數據損壞的可能性,因爲Django的ORM API和Forms API並不是以這種方式分發的。

就「生產」服務器的定義而言。我的理解是,開發者服務器並不是爲可靠性,可用性,安全性或質量而設計的。例如,它一次只能提供一個請求。話雖如此,每個用例都定義了自己的一組需求來定義生產環境。我認爲我的需求「生產」,不會滿足亞馬遜的生產定義:)

+1

大多數生產部署都是多進程的,所以你將有多個Django實例訪問同一個數據庫。這應該沒有問題。由於SQLite處理數據庫鎖定的方式,只有SQLite可能會在多個進程的高併發負載下出現問題。即便如此,這不應該導致腐敗。 –

+0

是的,但應用程序必須記住這一點,特別是如果它們更改數據和緩存更改。我的觀點是,管理員應用程序並沒有考慮到這一要求。 –