【问题标题】:How to define two databases in django one for Production and one for Development如何在 django 中定义两个数据库,一个用于生产,一个用于开发
【发布时间】:2014-04-15 22:02:13
【问题描述】:

我有一个可以在 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()

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

【问题讨论】:

标签: python django heroku


【解决方案1】:

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

这个 local_setting 文件应该包含在你的 .gitignore 中

【讨论】:

    【解决方案2】:

    你使用 VirtualEnvs 吗?

    您可以像这样设置settings.py

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

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

    生产 virtualenv postactivate 使用 postgresql 值设置环境变量 DB_EN​​GINE、DB_NAME、DB_HOST

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

    【讨论】:

    • 您是说在 heroku 中这些环境变量 是为我们设置的,还是我们必须自己在生产环境中设置这些变量?
    • 您必须在生产环境中设置环境变量。
    • 有趣,我们必须把变量名和值放在哪里?我现在只知道如何创建一个 virtualenv 并修改使用 pip 安装的应用程序
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-29
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 2020-07-20
    • 1970-01-01
    相关资源
    最近更新 更多