Django приложение на Heroku: проблемы с постоянным развитием ПОСЛЕ развертывания - PullRequest
0 голосов
/ 19 февраля 2020

Итак, я только что обновил свое приложение Django для Heroku и GIT впервые перенес мою основную ветку в производство. Работает хорошо. Однако, когда я пытаюсь запустить свое приложение локально в той же главной ветке, я получаю все эти ошибки. Понятно, что поскольку я обновил файл настроек специально для производства на Heroku.

У меня следующий вопрос:

Если я хочу продолжить свою разработку локально и периодически pu sh стабильные версии для производства, мне нужно поддерживать 2 файла settings.py? (ie, один для разработчика и один для продукта)

Я новичок, поэтому извините, если этот вопрос звучит смешно, но я не могу найти какой-либо четкой информации об этом, после прочтения документации Heroku о развертывании: https://devcenter.heroku.com/articles/git

Я просто хочу иметь возможность продолжить свою разработку локально.

Буду признателен за любые предложения.

1 Ответ

1 голос
/ 19 февраля 2020

Я полагаю, что самая большая проблема между средами разработки и производства - это разница в базах данных, которые они используют. Поэтому используйте переменные среды для режимов разработки и производства.

  1. Создайте файл .env в проекте root
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 ... Надеюсь, это поможет
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...