我知道那里有很多关于类似问题的问题,但我认为我有一个尚未解决的特定风味。我正在尝试创建我的本地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?
但是假设我要这样做,新的db会在哪里生活,django将如何知道如何访问它,我是否会遇到相同的用户/通行证问题?
非常感谢。
答案 0 :(得分:18)
假设你安装了postgres,请通过pgadmin或psql连接并创建一个新用户。然后创建一个新数据库并将新用户作为所有者。确保您可以通过psql与新用户连接到数据库。然后,您需要在virtualenv的bin文件夹中的postactivate文件中设置一个env变量并保存。以下是我对数据库的看法:
export DATABASE_URL='postgres://{{username}}:{{password}}@localhost:5432/{{database}}'
只需注意:将此值添加到您的postactivate不会执行任何操作。保存时不运行该文件。您需要在$提示符下运行此命令,或者只是停用并激活您的virtualenv。
您的settings.py应该从此env var:
中读取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值将适用于本地和生产,并且您的用户名/密码不受版本控制。它们只是env配置值。