Heroku上的Django应用:部署后持续开发的问题

时间:2020-02-19 03:58:57

标签: django heroku

因此,我刚刚为Heroku更新了我的Django应用,GIT首次将我的master分支投入了生产。效果很好。但是,当我尝试在同一master分支上本地运行我的应用程序时,会遇到所有这些错误。可以理解,因为我已经更新了专门用于Heroku生产的设置文件。

我的问题如下:

如果我想在本地继续进行开发并定期将稳定版本推送到生产环境,是否需要维护2个settings.py文件? (即,一个用于开发人员,一个用于产品)

我是一个初学者,很抱歉,如果这个问题听起来很荒谬,但是在阅读了Heroku的有关部署的文档后,我似乎找不到任何明确的信息:https://devcenter.heroku.com/articles/git

我只希望能够继续在本地运行我的开发。

任何建议将不胜感激。

1 个答案:

答案 0 :(得分:1)

我猜想开发环境和生产环境之间最大的问题是它们使用的数据库之间的差异。因此,请将环境变量同时用于开发和生产模式。

  1. 在项目根目录下创建一个.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
  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())
  1. 在将代码推送到Heroku之前,适当地更改.env变量之后,运行heroku config:set $(cat .env | sed '/^$/d; /#[[:print:]]*$/d')来在heroku的仪表板中强制执行数据库更改...希望对您有所帮助