![](/img/trans.png)
[英]Django - deployment with DigitalOcean issue - python collectstatic
[英]Problems debugging Django `collectstatic` in a cloudControl deployment
我有一個部署到cloudControl的Django應用程序。 配置是標准配置,推送/部署不會發生(明顯)錯誤。
但是collectstatic步驟沒有執行:它靜默失敗(我看不到-----> Collecting static files
消息)。 部署后,該應用程序的靜態文件夾為空,因此您會連續收到500個服務器錯誤。
我可以通過更改Procfile
來解決它,但是它也不是一致的:
web: python manage.py collectstatic --noinput; gunicorn app.wsgi:application --config gunicorn_cnf.py --bind 0.0.0.0:${PORT:-5000}`
collectstatic可以在本地正常運行,並且如果我運行cctrlapp app/deployment run "python manage.py collectstatic --noinput"
不會顯示任何錯誤:
將669個靜態文件復制到'/ srv / www / staticfiles / static',后處理669。
但是/srv/www/staticfiles/static
為空。
我怎么知道為什么在push階段沒有執行collectstatic?
我已經能夠使用自定義的python buildpack調試問題,所以這里是進一步參考的答案。
問題出在settings.py
文件中。 我在此文件中要做的第一件事是檢查我們是在cloudControl環境中還是在本地環境中。 我這樣做是在尋找CRED_FILE
環境變量(與建議的變量沒有太大不同):如果未找到任何變量,則會加載一個本地JSON文件,該文件模仿該憑據變量進行開發:
try:
cred_file = os.environ['CRED_FILE']
DEBUG = False
except KeyError:
cred_file = os.path.join(BASE_DIR, 'creds.json')
DEBUG = True
知道環境后,我就可以擁有不同的INSTALLED_APPS
(在生產和開發中, requirements.txt
文件也略有不同)或更改某些設置。
現在的壞消息是:在推送階段沒有可用的CRED_FILE
。
因此,我試圖加載未安裝的應用程序(因為它們僅在開發需求文件中,例如coverage
或django-debug-toolbar
)或使用未設置的憑據(當然, creds.json
未上傳到資源庫:僅上傳具有虛擬值的TXT作為參考)。 這就是為什么collectstatic
在推階段默默地失敗。
這是我的解決方案(只要您的存儲庫中有虛擬憑據文件,它就可以工作):
try:
cred_file = os.environ['CRED_FILE']
DEBUG = False
except KeyError:
if os.path.exists(os.path.join(BASE_DIR, 'creds.json')):
cred_file = os.path.join(BASE_DIR, 'creds.json')
DEBUG = True
else:
cred_file = os.path.join(BASE_DIR, 'creds.json.txt')
DEBUG = False
憑證不是collectstatic
使用的,因此creds.json.txt
文件中可以包含任何內容。 不是很干凈,但是現在可以正常工作了。
編輯
正如@pst在評論中指出的那樣,有一個環境變量可以知道buildpack是否正在運行,因此我們也可以使用該變量來加載所需的憑據並設置DEBUG
。
if 'CRED_FILE' in os.environ:
cred_file = os.environ['CRED_FILE']
DEBUG = False
elif 'BUILDPACK_RUNNING' in os.environ:
cred_file = os.path.join(BASE_DIR, 'creds.json.txt')
DEBUG = False
else:
cred_file = os.path.join(BASE_DIR, 'creds.json')
DEBUG = True
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.