10

我知道那里有很多与类似问题相关的问题,但我认为我有一个尚未解决的特定风格。我正在尝试创建我的本地 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 获取数据库:我的 Postgres 目录是否应该紧挨着我的项目文件夹?如果是这样,怎么做?

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

谢谢一堆。

4

1 回答 1

18

假设你安装了 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()}

然后,您将使用他们的 CLI 工具配置 Heroku,以便在部署时使用您的生产数据库。就像是:

heroku config:set DATABASE_URL={{production value here}}

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

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

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

于 2013-06-11T05:09:49.733 回答