我一直在Heroku上开发,使用config
变量来存储敏感和其他环境变量。在本地开发时,我在.env
文件中镜像了这些变量。
我现在发现的是.env
文件中的变量在迁移期间未加载。它们在使用heroku local
运行本地Web服务器时加载,但不加载迁移。当我的本地应用程序仍在使用默认的sqlite3数据库时,这不是问题,因为sqlite默认数据库在设置文件中是“硬编码的”。但是最近我想将本地Postgresql DB用于本地开发。好的,我将DATABASE_URL
变量添加到我的.env
文件中。
我无法将本地应用迁移到数据库。我发现这是因为.env
文件内容未添加到迁移的os.environ
映射中。
为了测试,我在.env
文件中添加了一个测试变量:
TEST="teeeest"
然后在settings.py
:
import os
import dj_database_url
if "TEST" not in os.environ:
raise Exception("No .env vars found.")
我尝试了python manage.py migrate
:
文件“/Users/apple/heroku/b/b/settings.py”,第16行,in 提高异常(“找不到.env vars。”)例外:找不到.env变种。
但是我可以运行heroku local
并且没有错误。我还做了进一步的测试,以确保.env
期间heroku local
变量可用。
由于各种原因,我想在.env
文件中设置我的本地数据库连接字符串,但目前似乎不可能。这是在heroku上django的正确行为吗? .env
文件变量只能在运行服务器时访问,而不能用于迁移?
答案 0 :(得分:6)
我终于弄清楚只是运行python manage.py migrate
没有加载.env
文件变量。您需要在heroku local
环境中运行命令:
heroku local:run python manage.py migrate
答案 1 :(得分:1)