我們是使用PostgreSQL數據庫後端的應用程序的開發人員的小團隊。我們每個人都有一個單獨的工作目錄和virtualenv,但我們共享相同的PostgreSQL數據庫服務器,即使Jenkins在同一臺機器上。在Django中使用動態數據庫TEST_NAME會危險嗎?
所以我試圖找出辦法,讓我們沒有運行到一個數據庫名稱衝突運行並聯同一項目的測試。此外,有時一個Jenkins構建會在中途失敗,並且測試數據庫最終不會被丟棄,這樣後續的Jenkins構建可能會被現有數據庫弄糊塗並自動失敗。
我已經決定嘗試是這樣的:
import os
from datetime import datetime
DATABASES = {
'default': {
# the usual lines ...
TEST_NAME: '{user}_{epoch_ts}_awesome_app'.format(
user=os.environ.get('USER', os.environ['LOGNAME']),
# This gives the number of seconds since the UNIX epoch
epoch_ts=int((datetime.utcnow() - datetime.utcfromtimestamp(0)).total_seconds())
),
# etc
}
}
因此,在每個測試運行最有可能測試數據庫名稱將是獨一無二的,使用用戶名和時間戳。詹金斯甚至可以並行運行構建,我認爲。
它似乎工作至今。但是它會危險嗎?我猜我們是安全的,只要我們不要試圖直接導入項目設置模塊,並且只使用django.conf.settings因爲應該是單身樣和只計算一次,對嗎?