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

Joh*_*cas 10 django postgresql heroku

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

我已经找到了关于如何做到这一点的基本答案,例如(我认为这有点过时了):

'#DATABASES = {'default': dj_database_url.config(default='postgres://fooname:barpass@localhost/dbname')}'
Run Code Online (Sandbox Code Playgroud)

这解决了"ENGINE"未配置错误.但是,当我运行'python manage.py syncdb'时,我收到以下错误:

 'OperationalError: FATAL:  password authentication failed for user "foo"
 FATAL:  password authentication failed for user "foo"'
Run Code Online (Sandbox Code Playgroud)

所有可想到的用户名/通道组合都会发生这种情况.所以我的ubuntu用户名/传递,我的heroku用户名/传递等.如果我只是尝试取出Heroku组件并在本地构建它,就好像我在遵循教程时使用postgresql一样.由于我还没有数据库,那些用户名/传递值是指什么?问题究竟是什么,我需要先创建一个数据库?如果是这样的话?

作为附注,我知道我可以使用此处概述的过程从heroku获取数据库:我应该将我的Postgres目录放在项目文件夹旁边吗?如果是这样,怎么样?

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

谢谢一堆.

Dav*_*d S 18

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

export DATABASE_URL='postgres://{{username}}:{{password}}@localhost:5432/{{database}}'
Run Code Online (Sandbox Code Playgroud)

请注意:将此值添加到您的postactivate不会执行任何操作.保存时不运行该文件.你需要在$提示符下运行它,或者只是停用并激活你的virtualenv.

您的settings.py应该从此env var中读取:

DATABASES = {'default': dj_database_url.config()}
Run Code Online (Sandbox Code Playgroud)

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

heroku config:set DATABASE_URL={{production value here}}
Run Code Online (Sandbox Code Playgroud)

(如果你没有安装Heroku的CLI工具,你需要这样做)

如果您需要确定生产数据库所需的值到底是多少,您可以通过登录heroku的postgresql子域(在编写本文时,它是https://postgres.heroku.com/)并选择它来获取它.列表中的数据库并查看"连接设置:URL"值.

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