django - перепутаны процессы производства / разработки и базы данных - PullRequest
0 голосов
/ 02 марта 2020

Это мое первое Django развертывание приложения, многому нужно научиться. Так что это мои настройки для DATABASES в settings.py

DEBUG = False

if DEBUG:
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        }
    }
else:
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql_psycopg2',
            'NAME': 'db_name',
            'USER': 'db_user',
            'PASSWORD': 'db_password',
            'HOST': 'localhost',
            'PORT': '',
        }
    }

Проблема:

  1. Для исправления ошибки я обновил некоторые поля в моделях локально, git push и git pull на сервере, выполнять миграции на сервере, как обычно, локально; миграции были успешными, однако, они, кажется, не применили

(если это имело какое-либо значение, исправление ошибки было изменено поле некоторого номера телефона с IntegerField на CharField, предотвращая ошибка «Убедитесь, что это значение меньше или равно 2147483647»; но странно то, что для мобильного телефона IntegerField до развертывания и локального запуска не было ошибок *


Путаница:

  1. Я помню, что только один суперпользователь был создан в базе данных postgres, или, по крайней мере, я так думал, но я могу войти с этой учетной записью суперпользователя как в производстве, так и в разработке (это не имеет значения DEBUG установлен на True или False), как это возможно ??
  2. То же самое изображения загружены только один раз, но могут быть просмотрены на веб-сайте, независимо от того, отлажен ли он или нет

Утверждение:

Означает ли это что код выше в settings.py в корне неверен? В django может быть установлена ​​только одна default база данных? Или я что-то не так сделал с миграциями?


PS. Я совсем не знаком с командой DATABASE, поэтому любые указатели на решение этой проблемы также приветствуются


Решение для тех, у кого такая же проблема:

Попробуйте Ответ @ruddra ниже, а также перезапуск приложения django:

$ sudo service gunicorn restart

возможно, вы используете apache2 или какой-то другой, чем gunicorn, перезапуск каким-то образом помог правильной базе данных или изменениям в код для применения.

1 Ответ

1 голос
/ 02 марта 2020

Вместо этого подхода я бы предложил использовать ENVIRONMENT VARIABLES, чтобы различать guish, как загружать базу данных. Например:

# command line
export USE_PROD_DB=true

# in settings.py

DEBUG = False

if not os.environ.get('USE_PROD_DB', None):
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        }
    }
else:
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql_psycopg2',
            'NAME': 'db_name',
            'USER': 'db_user',
            'PASSWORD': 'db_password',
            'HOST': 'localhost',
            'PORT': '',
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...