2017-05-26 135 views
1

我爲我的Django應用程序安裝了pgcryto擴展使用PostgreSQL數據庫。在生產服務器上,我手動創建一個用戶,然後運行CREATE EXTENSION pgcrypto;以安裝擴展。Django測試與pgcrypto失敗

然而,當我運行./manage.py test,因爲我的模型是使用來自pgcrypto_expressionsEncryptedTextField場失敗,這是自動創建的測試數據庫不具有自然安裝的擴展(因爲它需要創建的每個數據庫中明確啓用)。在Django設置我的測試數據庫並開始遷移的時間之間,如何「注入」代碼/命令?

或者說,我該如何在PostgreSQL中啓用全局擴展?

+0

您可以創建一個安裝擴展的遷移 - 請參閱示例[在文檔](https://docs.djangoproject.com/en/1.11/ref/contrib/postgres/operations/#creating-extension-using -migrations)。 – Alasdair

+0

@Alasdair太棒了,正是我所需要的。我已經快速瀏覽了一下,但是因爲我仍然是一個noob,我在哪裏放這個代碼?任何文件,它會撿起來?我是否需要將它插入到001 _...遷移文件中(但每次都會被覆蓋) – strangetimes

+0

我不明白它爲什麼會被覆蓋。它可以進入你喜歡的任何應用程序的遷移文件。理想情況下,將其添加爲應用程序的「0001_initial」遷移。只要使用'EncryptedTextField'的任何遷移都將此遷移作爲[依賴項](https://docs.djangoproject.com/en/1.11/topics/migrations/#dependencies),就應該可以工作。 – Alasdair

回答

0

在主要來自@Alasdair的幫助下,我能夠設置一個位於我的應用程序和其他應用程序之間的虛擬應用程序。然後,我可以調整我的依賴關係,使得構建服務器繼續清理實際應用程序中的遷移,同時始終在遷移應用程序之前安裝pgcrypto擴展。