【问题标题】:Configuring postgresql database for local development in Django while using Heroku使用 Heroku 在 Django 中为本地开发配置 postgresql 数据库
【发布时间】: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 没有任何关系。

标签: django postgresql heroku


【解决方案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 我已更改我的答案以尝试解决您的问题。如果您需要更多帮助,请告诉我。
猜你喜欢
  • 2016-12-06
  • 1970-01-01
  • 2015-09-12
  • 2015-10-11
  • 2013-01-15
  • 2014-07-20
  • 1970-01-01
  • 2013-01-25
  • 2014-11-23
相关资源
最近更新 更多