部署Django至DigitalOcean Apps后本地无法运行,该如何解决?
解决本地Django应用缺少DATABASE_URL环境变量的问题
方案一:用python-dotenv管理本地环境变量
- 安装依赖:
pip install python-dotenv - 在项目根目录创建
.env文件,写入本地数据库连接地址,示例:# SQLite示例 DATABASE_URL=sqlite:///db.sqlite3 # PostgreSQL示例 # DATABASE_URL=postgres://用户名:密码@localhost:5432/数据库名 - 在
settings.py的最顶部添加代码,加载本地环境变量:import os from dotenv import load_dotenv load_dotenv() # 自动读取项目根目录的.env文件 - 本地运行时会自动加载
.env里的配置,部署到DigitalOcean时,平台会自动注入生产环境的DATABASE_URL,两者互不冲突
方案二:区分本地与生产环境配置
如果不想用dotenv工具,可以直接在settings.py里做环境判断:
- 修改数据库配置代码,优先加载本地开发配置:
import os import dj_database_url import sys # 本地开发环境(DEBUG为True时触发) if os.getenv('DEBUG', 'False') == 'True': DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': BASE_DIR / 'db.sqlite3', } } # 生产环境(DigitalOcean) elif len(sys.argv) > 0 and sys.argv[1] != 'collectstatic': if os.getenv("DATABASE_URL", None) is None: raise Exception("DATABASE_URL environment variable not defined") DATABASES = { "default": dj_database_url.parse(os.environ.get("DATABASE_URL")), } - 本地运行时,通过命令行临时设置DEBUG变量:
Linux/macOS:DEBUG=True python manage.py runserver
Windows命令行:set DEBUG=True && python manage.py runserver
关键注意事项
.env文件要加入.gitignore,防止本地数据库密码等敏感信息被提交到代码仓库- DigitalOcean App平台的生产环境配置无需修改,平台会自动维护
DATABASE_URL变量
内容的提问来源于stack exchange,提问作者Rodragon
相关产品推荐
相关产品推荐

