從事 heroku django 專案。
目標:我也想在云上使用相同的代碼在本地運行服務器(有道理)。
問題:環境從 linux 服務器 (heroku) 到本地 PC windows 系統不同。本地環境變數不同于云 Heroku 配置變數。Heroku 配置變數可以使用 CLI 輕松設定heroku config:set TIMES=2。
設定本地環境變數是一團糟。
我在 cmd 中嘗試了以下操作:
py -c "import os;os.environ['Times']=2"# To set an env var
然后運行py -c "import os;os.environ.get('Times','Not Found')"標準輸出:“未找到”。
經過一些研究,似乎每個行程/會話使用情況都會臨時存盤此類環境變數。
解決方案理論:重定向os.environ到.envroot heroku 專案的檔案而不是 PC env vars。所以我發現這個工具direnv非常適合類 Unix 作業系統,但不適用于 Windows。
views.py 代碼(在云上完美運行,在本地機器上生病):
import os
import requests
from django.shortcuts import render
from django.http import HttpResponse
from .models import Greeting
def index(request):
# get method takes 2 parameters (env_var_string,return value if var is not found)
times = int(os.environ.get('TIMES',3))
return HttpResponse('<p>' 'Hello! ' * times '</p>')
def db(request):
greeting = Greeting()
greeting.save()
greetings = Greeting.objects.all()
return render(request, "db.html", {"greetings": greetings})
主要問題:是否有適當的方法可以在 Windows 中本地隱藏機密并通過 訪問它們os.environ['KEY']?
另一個解決方案理論:我想知道 python 虛擬環境是否有它自己的環境變數。如果是,我會在本地激活 venv 而不會影響云。因此os.environ['KEY']被重定向到 venv 變數。再次,這只是一個理論。
uj5u.com熱心網友回復:
您可以使用可以通過os.environ['KEY'].
相同的代碼適用于本地開發和 Heroku。
在 Heroku 上使用 ConfigVars 定義這些變數,heroku config:set KEY=val而在本地(例如在 Windows 上)在.env檔案中定義相同的變數(使用dotenv加載它們)。該.env檔案永遠不會與源代碼一起提交。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/400274.html
