如何在django中定义两个数据库用于生产,一个用于开发

时间:2014-04-15 22:02:14

标签: python django heroku

我有一个适用于Heroku的项目,我没有在我的本地机器上安装PostgreSQL。我想继续使用sqlite3在我的本地计算机上运行该应用,但当我将其推送到Heroku时,它将转换为pg

我想要做的就是有一个IF条件,如果这是开发然后运行sqlite3 ..但如果它的生产运行然后跟随命令。

DATABASES = {
  'default': {
    'ENGINE': 'django.db.backends.postgresql_psycopg2',
    'NAME': '',
    'HOST': '',
    'PORT': 5432,
    'USER': '',
    'PASSWORD': ''
  }
}

Heroku正在使用dj_database_url

import dj_database_url
DATABASES['default'] =  dj_database_url.config()

当我们定义用于生产的宝石和用于测试和开发的另一个宝石时,它基本上类似于Rails

2 个答案:

答案 0 :(得分:3)

您可以在项目中创建local_settings.py文件,并从基本设置文件中导入该文件。这样,您可以为每个环境设置不同的设置。

此local_setting文件应包含在.gitignore

答案 1 :(得分:0)

您使用VirtualEnvs吗?

您可以将settings.py设置为:

DATABASES = {
    'default': {
    'ENGINE': get_var('DB_ENGINE'),
    'NAME': get_var('DB_NAME'),
    'HOST': get_var('DB_HOST'),
    ...
    }
}

其中get_var正在读取环境变量。这些envvars由virtualenv的postactivate文件设置。

生产virtualenv postactivate使用postgresql值设置envvars DB_EN​​GINE,DB_NAME,DB_HOST

dev virtualenv postactivate文件设置与开发DB对应的env变种。