django-生产/开发迁移和数据库混合在一起

时间:2020-03-02 04:01:07

标签: python django database debugging

这是我的第一个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 pushgit pull,使服务器上的迁移像往常一样在本地进行;迁移成功,但是,它们似乎没有应用

(如果有关联,则错误修复是将某些电话号码字段从IntegerField更改为CharField,防止出现错误“验证此值小于或等于2147483647”;但是奇怪的是,手机IntegerField在部署并在本地运行之前没有任何错误)


困惑:

  1. 我记得在postgres数据库上只创建了一个超级用户,或者至少我认为是这样,但是我可以在生产和开发中都使用该超级用户帐户登录(无论是否设置了DEBUGTrueFalse),那怎么可能?
  2. 相同的图像仅上传一次,但是无论是否调试,都可以在网站上查看

断言:

这是否意味着settings.py中的上述代码从根本上是错误的?只能在Django中设置一个default数据库吗?还是我在迁移时做错了什么?


PS。我一点都不熟悉DATABASE命令,因此也很感谢能解决该问题的任何指针


解决方案,对于某些有相同问题的人:

在下面尝试@ruddra的答案以及重新启动django应用程序:

$ sudo service gunicorn restart

也许您正在使用apache2gunicorn以外的其他软件,以某种方式重新启动可以帮助正确的数据库或代码更改也适用。

1 个答案:

答案 0 :(得分:1)

除了使用这种方法,我建议使用ENVIRONMENT VARIABLES来区分如何加载数据库。例如:

# 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': '',
        }
    }