我正在研究 Google Cloud Django 專案。
我正在嘗試檢查settings.py我是在開發模式還是生產模式下運行。
我添加了以下代碼塊來測驗運行程式的軟體是在我的機器上還是在谷歌云服務器上。
# | settings.py |
if os.getenv('SERVER_SOFTWARE', '').startswith('Google App Engine'):
#code to execute in production
else:
#code to execute in development
我注意到if陳述句總是 false,所以我決定除錯os.environdict。除錯的結果是環境的鍵SERVER_SOFTWARE的值等于gunicorn/20.1.0。
正如此stackoverflow 問題的正確答案中所寫,在生產環境中運行時(在 Google Cloud Servers App Engine 上也是如此),SERVER_SOFTWARE的值應該是Google App Engine/XYZ,其中 X、Y 和 Z 代表 Google Cloud 的版本。但是,正如我所說,我的價值,當在 App Engine 上運行時,不是那樣的,它是gunicorn/20.1.0。
那么,如何讓程式知道我是在開發中還是在生產中運行?
uj5u.com熱心網友回復:
我將介紹一些其他解決方案。
(1) GAE 提供的環境變數
GAE 會自動設定您在本地運行時可能未設定的環境變數。我用這個:
version = os.environ.get('GAE_VERSION', 'local')
您將在您的機器上獲得生產中的實際版本和“本地”版本。
(2)檢查請求URL
這是 Flask,但在 Django 中一定有類似的東西:
request.url_root == 'http://localhost:8080/'
uj5u.com熱心網友回復:
不幸的是,您鏈接到的 Stack Overflow (SO) 答案已有將近 12 年的歷史,并且指的是 Python 2(已棄用)。我無法找到SYSTEM_SOFTWARE默認的 env。變種 適用于 Google Cloud Platform (GCP) App Engine Standard(此處)和柔性環境(此處)。
可以肯定地說 env. 變種 默認情況下,App Engine 注入到每個標準實體中的資料可以更改。相反,你為什么不提供一個 env。變種 在您的 App Engine 標準環境中。組態檔 ( app.yaml) 以確保您的 Django 應用程式僅在您需要時才在“生產”中運行:
將該
env_variables部分添加到app.yaml,例如:. . . env_variables: DJANGO_PRODUCTION_ENVIRONMENT: true . . .或者:
. . . env_variables: DJANGO_SYSTEM_SOFTWARE: "production" . . .您可以查看更多 App Engine 標準環境。配置。設定在這里。
將您的 Django 應用程式部署到 App Engine 標準環境。使用 GCP Cloud SDK (
gcloud):gcloud app deploy --appyaml=./app.yaml
確認舊版本(例如,$AES_OLD_VERSION)已停止:
gcloud app versions list \
--format="table[box=true](version.id:label=ID, version.servingStatus:label=STATUS)" \
--service=$AES_SERVICE_ID
┌──────────────────┬─────────┐
│ ID │ STATUS │
├──────────────────┼─────────┤
│ . . . │ . . . │
│ $AES_OLD_VERSION │ STOPPED │
│ $AES_VERSION_ID │ SERVING │
└──────────────────┴─────────┘
確認您的 env. 變種 已經變成$AES_VERSION_ID了:
gcloud app versions describe $AES_VERSION_ID \
--format="yaml(envVariables)" \
--service=$AES_SERVICE_ID
#=>
envVariables:
DJANGO_PRODUCTION_ENVIRONMENT: 'True'
DJANGO_SYSTEM_SOFTWARE: production
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/372081.html
