如何在 Heroku 上为 Django 应用程序设置数据库?

Posted

技术标签:

【中文标题】如何在 Heroku 上为 Django 应用程序设置数据库?【英文标题】:How to set up database for Django app on Heroku? 【发布时间】:2013-05-27 22:25:08 【问题描述】:

我是一个完整的 Heroku 菜鸟,我正在尝试在 Heroku 上设置一个 Django 应用程序。我不知道在 settings.py 中为这些设置输入什么:

DATABASES = 
    'default': 
        'ENGINE': 'django.db.backends.', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': '',                      # Or path to database file if using sqlite3.
        # The following settings are not used with sqlite3:
        'USER': '',
        'PASSWORD': '',
        'HOST': '',                      # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP.
        'PORT': '',                      # Set to empty string for default.
    

谁能帮帮我?谢谢!

【问题讨论】:

【参考方案1】:

您可以通过查看仪表板中的数据库信息或运行“heroku config”来查看数据库配置字符串来手动执行此操作。但目前为止最好的方法在Heroku Getting Started guide for Django 中有详细说明。将dj-database-url==0.2.1 添加到您的requirements.txt 文件中,然后:

# Parse database configuration from $DATABASE_URL
import dj_database_url
DATABASES['default'] =  dj_database_url.config()

代替其他数据库定义。

【讨论】:

谢谢!所以你说如果我编辑 requirements.txt,那么我应该能够将上面的代码块复制并粘贴到 settings.py 中,而不必担心填写数据库设置?我这样做了,然后尝试运行'python manage.py syncdb'并得到以下错误:'ImproperlyConfigured:settings.DATABASES 配置不正确。请提供 ENGINE 值。查看设置文档以获取更多详细信息。' 然后我尝试将“ENGINE”值设置为“django.db.backends.postgresql_psycopg2”,但它仍然给了我同样的错误......嗯。 可能问题是这段代码是在 Heroku 上运行的,你的 DATABASE_ENV 或其他一些系统变量已经设置好了。我假设您正在尝试首先在本地构建上运行它。要解决该问题,您可以将默认 URL 字符串传递给 dj_database_url.config()(请参阅 github.com/kennethreitz/dj-database-url )或为本地构建维护一个单独的设置文件。 也许理想的方法是设置您的设置文件,以便您的“基本”设置文件可以在 Heroku 上运行,但您也可以拥有一个本地设置文件,使用 import 覆盖只有特定的设置。解释如何做到这一点对于这个领域来说有点复杂,但如果你正在寻找这样的资源,我相信这是对初学者有用的书“Django 的两个勺子”中详细介绍的策略。 哦,我明白了。传入默认 URL 字符串似乎可行。谢谢!

以上是关于如何在 Heroku 上为 Django 应用程序设置数据库?的主要内容,如果未能解决你的问题,请参考以下文章

如何在使用heroku部署的flask webapp上为每个用户实现唯一的会话[重复]

如何在 Heroku 上为每个测功机设置单独的 slug?

在 Heroku 上为 Node.js 应用程序强制使用 HTTPS

在 Heroku 上为 Mongo Labs 数据库配置 Node.js 连接字符串

如何让 South 在 Heroku 中为 Django 应用程序工作

为啥在 Heroku 服务器上为 Laravel JWT 身份验证收到此错误