首页 > 解决方案 > Heroku 上的 Django 应用:部署后持续开发的问题

问题描述

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

我的问题如下:

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

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

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

任何建议将不胜感激。

标签: djangoheroku

解决方案


我想开发和生产环境之间最大的问题是他们使用的数据库不同。因此,对开发和生产模式都使用环境变量。

  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 仪表板中的数据库更改...希望它有所帮助

推荐阅读