使用 Heroku 在 Django 中为本地开发配置 postgresql 数据库

Posted

技术标签:

【中文标题】使用 Heroku 在 Django 中为本地开发配置 postgresql 数据库【英文标题】:Configuring postgresql database for local development in Django while using Heroku 【发布时间】:2013-06-06 20:12:23 【问题描述】:

我知道有很多与类似问题相关的问题,但我认为我有一个尚未解决的特定问题。我正在尝试创建我的本地 postgresql 数据库,以便除了推送到 Heroku 之外,我还可以进行本地开发。

例如,我已经找到了有关如何执行此操作的基本答案(我认为这有点过时了):

'#DATABASES = 'default': dj_database_url.config(default='postgres://fooname:barpass@localhost/dbname')'

这解决了“ENGINE”未配置错误。但是,当我运行“python manage.py syncdb”时,出现以下错误:

 'OperationalError: FATAL:  password authentication failed for user "foo"
 FATAL:  password authentication failed for user "foo"'

所有可能的用户名/密码组合都会发生这种情况。所以我的 ubuntu 用户名/密码、我的 heroku 用户名/密码等。如果我只是尝试取出 Heroku 组件并在本地构建它,就好像我在遵循教程时使用 postgresql 一样,也会发生这种情况。由于我还没有数据库,这些用户名/密码值到底指的是什么?问题就是我需要先创建一个数据库吗?如果有怎么办?

作为旁注,我知道我可以使用此处概述的过程从 heroku 获取数据库:Should I have my Postgres directory right next to my project folder? If so, how?

但是假设我要这样做,新的数据库将在哪里运行,django 将如何知道如何访问它,我是否会遇到相同的用户/密码问题?

非常感谢。

【问题讨论】:

你能发布你的整个settings.py吗? 我记得,对于 nix 操作系统,您必须至少拥有名为 postgres 的初始用户才能访问 postgres DB。我对 PG 的体验受到 Win、Ubunru 和 CentOS 的限制。尝试执行 pg_ctl status。然后查看您的操作系统是否接受通过 TCP 协议对 Postgres 的调用;接下来,检查 postgres config pg_hba.conf 以获取可接受的地址。等等。最简单的方法是问谷歌:“PostgreSQL” [YourOSName] 是的,python 与其他 DBMS 的 PG 没有任何关系。 【参考方案1】:

假设您安装了 postgres,通过 pgadmin 或 psql 连接并创建一个新用户。然后创建一个新数据库并以您的新用户为所有者。确保您可以通过 psql 将新用户连接到数据库。然后,您需要在 virtualenv 的 bin 文件夹中的 postactivate 文件中设置一个 env 变量并保存它。这是我的数据库:

export DATABASE_URL='postgres://username:password@localhost:5432/database'

请注意:将此值添加到您的 postactivate 不会做任何事情。该文件在保存时不运行。您要么需要在 $ 提示符下运行它,要么只需停用并激活您的 virtualenv。

你的 settings.py 应该从这个环境变量中读取:

DATABASES = 'default': dj_database_url.config()

然后,您将使用 Heroku 的 CLI 工具配置 Heroku,以便在部署时使用您的生产数据库。比如:

heroku config:set DATABASE_URL=production value here

(如果您没有安装 Heroku 的 CLI 工具,则需要安装)

如果您需要确定生产数据库所需的确切值,您可以通过登录 heroku 的 postgresql 子域(在编写时为 https://postgres.heroku.com/)并从列出并查看“连接设置:URL”值。

这样,您的相同 settings.py 值将适用于本地和生产,并且您的用户名/密码不受版本控制。它们只是环境配置值。

【讨论】:

感谢大卫的帮助。我能够按照以下步骤进行第一步:cyberciti.biz/faq/howto-add-postgresql-user-account。您能否发布一个设置 env 变量的示例,它应该是什么,以及如何让 settings.py 从中读取?我对此有点困惑。 @JohnLucas 我已更改我的答案以尝试解决您的问题。如果您需要更多帮助,请告诉我。

以上是关于使用 Heroku 在 Django 中为本地开发配置 postgresql 数据库的主要内容,如果未能解决你的问题,请参考以下文章

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

将数据库从本地开发迁移到 Heroku-Django 1.8

Django:从本地开发推送时,SQLite 在 Heroku 上覆盖 POSTGRESQL db

.env 文件中的环境变量在 django、heroku 的本地迁移期间不可用

如何在 Django 1.4 中为本地开发提供静态文件

PySFTP失败,“在部署Django / Heroku时出现”找不到主机X的主机密钥”