推送到 Heroku 后“用户密码验证失败”

Posted

技术标签:

【中文标题】推送到 Heroku 后“用户密码验证失败”【英文标题】:"password authentication failed for user" after push to Heroku 【发布时间】:2012-08-12 10:55:36 【问题描述】:

我按照heroku documentation 安装了一个 django 应用程序,起初它运行良好。一天后,我将一些更改推送到服务器。在那之后,我根本无法访问该应用程序:FATAL: password authentication failed for user "drjstoymyqyarj"

我什至不能再同步数据库了:

$ heroku run python manage.py syncdb
Running `python manage.py syncdb` attached to terminal... up, run.1
Traceback (most recent call last):
  File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/app/.heroku/venv/lib/python2.7/site-packages/django/core/management/__init__.py", line 443, in execute_from_command_line
    utility.execute()
  File "/app/.heroku/venv/lib/python2.7/site-packages/django/core/management/__init__.py", line 382, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/app/.heroku/venv/lib/python2.7/site-packages/django/core/management/base.py", line 196, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/app/.heroku/venv/lib/python2.7/site-packages/django/core/management/base.py", line 232, in execute
    output = self.handle(*args, **options)
  File "/app/.heroku/venv/lib/python2.7/site-packages/django/core/management/base.py", line 371, in handle
    return self.handle_noargs(**options)
  File "/app/.heroku/venv/lib/python2.7/site-packages/django/core/management/commands/syncdb.py", line 57, in handle_noargs
    cursor = connection.cursor()
  File "/app/.heroku/venv/lib/python2.7/site-packages/django/db/backends/__init__.py", line 306, in cursor
    cursor = self.make_debug_cursor(self._cursor())
  File "/app/.heroku/venv/lib/python2.7/site-packages/django/db/backends/postgresql_psycopg2/base.py", line 177, in _cursor
    self.connection = Database.connect(**conn_params)
  File "/app/.heroku/venv/lib/python2.7/site-packages/psycopg2/__init__.py", line 179, in connect
    connection_factory=connection_factory, async=async)
psycopg2.OperationalError: FATAL:  password authentication failed for user "drjstoymyqyarj"
FATAL:  password authentication failed for user "drjstoymyqyarj"

我使用了 heroku 文档中推荐的数据库设置:

import dj_database_url
DATABASES = 'default': dj_database_url.config(default='postgres://localhost')

将代码推送到服务器后查看日志时,有一个我之前没有注意到的可疑Process exited with status 143。也许这与它有关?

$ heroku logs
heroku[web.1]: State changed from up to starting
heroku[web.1]: Stopping all processes with SIGTERM
heroku[web.1]: Starting process with command `python ./manage.py runserver 0.0.0.0:41048 --noreload`
app[web.1]: Validating models...
app[web.1]: 
app[web.1]: 0 errors found
app[web.1]: Django version 1.4, using settings 'ClosetList.settings'
app[web.1]: Development server is running at http://0.0.0.0:41048/
app[web.1]: Quit the server with CONTROL-C.
heroku[web.1]: Process exited with status 143
heroku[web.1]: State changed from starting to up

[编辑]heroku pg:psql 相同的错误消息。不过,我可以使用 heroku run python manage.py shell 打开 Django shell,但我无法访问其中的任何数据(当然也是同样的错误)。[/Edit]

对此的任何帮助表示赞赏。

【问题讨论】:

您是否测试过从heroku pg:psql 命令登录数据库?另外,你能打开一个shell:heroku run python manage.py shell吗?您是否仔细检查过 DATABASES 变量是否未初始化两次?此外,Heroku 正在将数据库从旧系统迁移到新系统。您是否尝试过手动执行此过程? 【参考方案1】:

运行

heroku config

并查看是否配置了超过 2 个 heroku dbs,并查看 DATABASE_URL 是否指向您配置的数据库。如果没有,那么您可以通过运行将您的数据库提升为默认的 DATABASE_URL:

heroku pg:promote HEROKU_POSTGRESQL_GREEN

HEROKU_POSTGRESQL_GREEN 是您的数据库名称,您将在配置中看到 HEROKU_POSTGRESQL_GREEN_URL。

一旦您配置的数据库升级为默认数据库,您就可以开始了。

【讨论】:

我现在无法真正测试,因为我在 heroku 上重新创建了该应用程序,它现在运行良好。不过,您的答案确实看起来很有希望。我会尝试一下,以防我再次遇到问题。 实际上,我昨天遇到了同样的问题并想出了这个解决方案。 :) 非常感谢您的回答。 以防万一它有帮助,在运行 heroku config 后,我看到我在 heroku 中的配置变量在密码中有一个“隐藏”空间,我必须添加一个字符保存变量然后删除变量,很奇怪,但感谢您的评论,我能够看到控制台中的空间

以上是关于推送到 Heroku 后“用户密码验证失败”的主要内容,如果未能解决你的问题,请参考以下文章

将应用程序部署到 Heroku 后无法推送到 Github

尝试将本地数据库推送到 Heroku 后出现“ActionView::Template::Error (Unknown primary key for table”

如何更新堆栈并将克隆的应用程序推送到 Heroku [重复]

heroku CLI 通过令牌进行身份验证

将不同的分支推送到 Heroku

无法推送到heroku