2016-08-15 56 views
-1

我有一個在Ubuntu上運行的Django 1.9驅動的網站,我經常遇到一個奇怪的問題,當我從本地PC運行本地項目的克隆時,一些錯誤消失使用127.0.0.1:8000網址。在這種情況下查找錯誤極其耗時,我想知道調試大型項目的最佳做法是什麼,特別是在網站已經部分使用的情況下。 爲了儘可能具體,我提供了一個錯誤的分步說明。Django網站產生的錯誤,在本地運行時不出現

第1步:我輸入一些網址,說,10.8.0.1:8000/show_students/

步驟2.請在頁面上有所動作,比如說,節省了學生檔案。該操作沒有成功結束,產生錯誤。

第3步。我將位於遠程服務器上的項目目錄複製粘貼到我PC上的本地目錄中,然後嘗試運行CLONE。我發現錯誤沒有發生。

現實生活中的例子,

task_email_recipients = TaskEmailRecipients.objects.get(task_type = 
task_instance.type, legal_entity_own = legal_entity_own_instance) 

此行拋出異常說LegalEntityOwn has no field named(是的,我沒有忽略任何東西。這是後「命名字段」空字符串) 如果我從同一個視圖127.0.0.1,錯誤消失。 我應該怎麼做?順便說一句,我使用Eclipse,如果這有什麼不同。我的本地電腦上安裝了MS Windows 10。

綜上,我的目標是從10.8.0.1

UPDATE調試項目運行的保羅 - Becotte的評論 我一直忽略了這一警告,但在運行項目時,它會發出警告

您有未應用的遷移;直到 被應用,您的應用可能無法正常工作。運行'python manage.py migrate'來應用它們。

+2

你是...... A.使用源代碼管理? B.使用遷移來控制數據庫的模式? C.以自動方式部署您的應用程序?像這樣的問題通常來自於部署服務器,然後忘記了這樣做,並且更好地控制兩個位置實際運行的內容通常會解決這些問題。 –

+0

Paul,請參閱更新後的問題。你能否澄清兩點(答案和B)? –

回答

1

所以,讓我來解釋一些概念。 A.源代碼控制(Git)讓你跟蹤源代碼的所有變化。這非常重要,以便您可以放心地確信,您的開發計算機上的代碼與部署的服務器運行的版本相同,而不會嘗試執行諸如來回複製文件等操作。像git status這樣的命令可以告訴你,如果你改變了一些東西,也許會給你提示兩種環境之間有什麼不同。如果你不使用git,你應該立即開始!

B.遷移就像數據庫模式的源代碼控制。像Mysql或Postgres這樣的SQL數據庫有一個固定的模式 - 你有很多表,帶有這些名字,而表A有三列,其中一列叫做名字,一列叫做ID等等。遷移的目的是爲了讓您瞭解這些模式是什麼 - 而不是登錄到數據庫並運行您構建的遷移文件,其中包含必要的命令,然後用版本號標記數據庫。然後運行這些命令文件,以便如果數據庫的版本相同,則知道它們具有相同的結構(這使您可以使本地數據庫與部署的數據庫相匹配)。 Django內置了一個有用的遷移系統... manage.py migrate是將所有遷移文件應用於當前數據庫的命令。如果您收到列出的錯誤消息,則基本上沒有機會使您的應用正常工作,因爲您的數據庫架構在某處與您的模型文件不同步。根據您非常有限的描述,您將一個字段添加到現在存在於本地數據庫中的模型中,但不存在於生產數據庫中。

C.我提到了一個部署腳本 - 這是一個可以運行的命令,讓您的代碼在遠程服務器上運行,以確保它每次都以相同的方式發生。在這種情況下,它可能是這樣的......

ssh production 
git pull 
python manage.py migrate 
uwsgi 

建立這樣一個腳本,讓你知道是怎麼回事,你可以排除不小心跳過步驟誤差向量。

相關問題