我在與我的 settings.py 檔案相同的目錄中創建了一個 .env 檔案,其中有一些環境變數,例如:secret_key、database_name 等。但是,它似乎沒有在 .env 中正確讀取資料庫名稱檔案。我覺得我遵循了檔案,但在推送到 Heroku 時仍然出現配置不正確的錯誤。它在本地運行服務器時確實有效。
設定.py
from pathlib import Path
import os
from datetime import timedelta
import environ
env = environ.Env()
environ.Env.read_env()
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
# Take environment variables from .env file
environ.Env.read_env(os.path.join(BASE_DIR, '.env'))
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/4.0/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = env('SECRET_KEY')
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = env('DEBUG')
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': env('DATABASE_NAME'),
'USER': env('DATABASE_USER'),
'PASSWORD': env('DATABASE_PASSWORD'),
'HOST': env('DATABASE_HOST'),
'PORT': env('DATABASE_PORT'),
}
}
.env(示例)
SECRET_KEY=django-insecure-vdihiodnsdkcndocndcndocdcoidcosjvodjv
DEBUG=True
DATABASE_NAME=vjiojjoj3oj3ioj3
DATABASE_USER=vdijvodivjdivfv
...
錯誤
File "/app/project_name/settings.py", line 94, in <module>
'NAME': env('DATABASE_NAME'),
File "/app/.heroku/python/lib/python3.10/site-packages/environ/environ.py", line 175, in __call__
return self.get_value(
File "/app/.heroku/python/lib/python3.10/site-packages/environ/environ.py", line 371, in get_value
raise ImproperlyConfigured(error_msg)
django.core.exceptions.ImproperlyConfigured: Set the DATABASE_NAME environment variable
django-environ 檔案:https ://github.com/joke2k/django-environ
編輯:好的,看起來使用 .env 檔案推送到 Heroku 不是可行的方法。將嘗試將我的 github 存盤庫與 heroku 鏈接并在設定中配置變數。我們會看看這是否會做到。
uj5u.com熱心網友回復:
您可能已經從您的編輯中猜到了,Heroku 不支持推送 .env 檔案。這是因為它使用了一個臨時檔案系統。
每個 dyno 都有自己的臨時檔案系統,以及最近部署的代碼的新副本。[...]任何寫入的檔案都將在測功機停止或重新啟動時被丟棄。例如,任何時候由于應用程式部署而更換測功機時都會發生這種情況,并且作為正常測功機管理的一部分,大約每天一次。
你最好使用 Heroku 的內置config var support。這里有些例子:
heroku config # View config vars
heroku config:set TEST=test # Sets TEST to "test"
heroku config:unset TEST # Reverses setting TEST
heroku config:get TEST # Returns value of TEST
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/410822.html
標籤:
