django - Heroku 上的 Django 应用:部署后持续开发的问题
问题描述
所以,我刚刚为 Heroku 更新了我的 Django 应用程序,GIT 首次将我的主分支推向了生产环境。效果很好。但是,当我尝试在同一个主分支上本地运行我的应用程序时,我得到了所有这些错误。可以理解,因为我已经更新了专门用于 Heroku 生产的设置文件。
我的问题如下:
如果我想在本地继续开发并定期将稳定版本推送到生产环境,是否需要维护 2 个 settings.py 文件?(即,一个用于开发,一个用于生产)
我是初学者,如果这个问题听起来很荒谬,我很抱歉,但是在阅读 Heroku 关于部署的文档后,我似乎找不到任何明确的信息:https ://devcenter.heroku.com/articles/git
我只是希望能够继续在本地运行我的开发。
任何建议将不胜感激。
解决方案
我想开发和生产环境之间最大的问题是他们使用的数据库不同。因此,对开发和生产模式都使用环境变量。
- 在项目根目录创建一个 .env 文件
SECRET_KEY='somesupersecretivesecretkey'
DEBUG=True #set to false while pushing to Heroku, leave at True while working in development
DB_NAME='dbname'
DB_USER='dbuser'
DB_PASSWORD='dbpassword'
DB_HOST='127.0.0.1'
MODE='dev' #set to 'prod' in production
ALLOWED_HOSTS='.localhost', '.herokuapp.com', '.127.0.0.1'
DISABLE_COLLECTSTATIC=1
- 在您的项目设置中(您只需要一个),检查您处于哪种模式(生产或开发)并选择要使用的数据库(安装在 Heroku 中的数据库或您机器上的数据库)。假设您使用的是 Postgres,如下所示:
import os
import django_heroku
import dj_database_url
from decouple import config,Csv
MODE=config("MODE", default="dev")
SECRET_KEY = config('SECRET_KEY')
DEBUG = config('DEBUG', default=False, cast=bool)
# development
if config('MODE')=="dev":
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': config('DB_NAME'),
'USER': config('DB_USER'),
'PASSWORD': config('DB_PASSWORD'),
'HOST': config('DB_HOST'),
'PORT': '',
}
}
# production
else:
DATABASES = {
'default': dj_database_url.config(
default=config('DATABASE_URL')
)
}
db_from_env = dj_database_url.config(conn_max_age=500)
DATABASES['default'].update(db_from_env)
ALLOWED_HOSTS = config('ALLOWED_HOSTS', cast=Csv())
- 在将代码推送到 Heroku 之前,在
.env
适当更改变量后,运行heroku config:set $(cat .env | sed '/^$/d; /#[[:print:]]*$/d')
以强制执行 heroku 仪表板中的数据库更改...希望它有所帮助
推荐阅读
- javascript - 按下 Escape 按钮后如何在 React 中运行函数?
- javascript - 如何在Javascript中同步延迟代码执行?
- sql - SQL Developer 中的加载时间
- angular - 无法解析功能模块中的 HttpInterceptors
- javascript - 当元素从一开始不在网站中时,反应更改类的 css
- c - 为什么更改变量时int关键字对变量值有影响
- javascript - 仅使用 JavaScript 单击按钮时如何聚焦输入
- javascript - 切片或隐藏复选框选择选项
- python - 去除多特征回归问题中的异常值
- python - 将项目部署到谷歌云时出现 KeyError