heroku服务器上的ghost博客密码验证失败

时间:2016-12-16 13:00:29

标签: node.js postgresql heroku ghost-blog

我试图设置Ghost(node.js博客应用)在heroku服务器上运行。我在此处遵循了this教程,但在加载应用URL时收到应用程序错误。查看日志,我得到以下堆栈跟踪:

2016-12-16T10:00:08.185701+00:00 heroku[web.1]: Starting process with command `NODE_ENV=production node index.js`
2016-12-16T10:00:11.989635+00:00 app[web.1]: 
2016-12-16T10:00:11.989655+00:00 app[web.1]: ERROR: password authentication failed for user "xxxxxxxxxxxxxx" 
2016-12-16T10:00:11.989656+00:00 app[web.1]:  error: password authentication failed for user "xxxxxxxxxxxxxx"
2016-12-16T10:00:11.989656+00:00 app[web.1]:  
2016-12-16T10:00:11.989658+00:00 app[web.1]:     at Connection.parseMessage (/app/node_modules/pg/lib/connection.js:361:17)
2016-12-16T10:00:11.989657+00:00 app[web.1]:     at Connection.parseE (/app/node_modules/pg/lib/connection.js:534:11)
2016-12-16T10:00:11.989659+00:00 app[web.1]:     at TLSSocket.<anonymous> (/app/node_modules/pg/lib/connection.js:105:22)
2016-12-16T10:00:11.989660+00:00 app[web.1]:     at emitOne (events.js:96:13)
2016-12-16T10:00:11.989661+00:00 app[web.1]:     at readableAddChunk (_stream_readable.js:176:18)
2016-12-16T10:00:11.989662+00:00 app[web.1]:     at TLSSocket.Readable.push (_stream_readable.js:134:10)
2016-12-16T10:00:11.989660+00:00 app[web.1]:     at TLSSocket.emit (events.js:188:7)
2016-12-16T10:00:11.989663+00:00 app[web.1]:     at TLSWrap.onread (net.js:548:20) 
2016-12-16T10:00:11.989664+00:00 app[web.1]: 
2016-12-16T10:00:12.059675+00:00 heroku[web.1]: Process exited with status 0
2016-12-16T10:00:12.098899+00:00 heroku[web.1]: State changed from starting to crashed
2016-12-16T10:00:11.574238+00:00 app[web.1]: WARNING: Ghost is attempting to use a direct method to send email. 
2016-12-16T10:00:11.574254+00:00 app[web.1]: It is recommended that you explicitly configure an email service.
2016-12-16T10:00:11.575112+00:00 app[web.1]: Help and documentation can be found at http://support.ghost.org/mail.
2016-12-16T10:00:11.575114+00:00 app[web.1]: 
2016-12-16T12:20:59.497399+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=ai-blog.herokuapp.com request_id=a725a350-ade1-4f00-9b8a-125fac34eb23 fwd="82.46.0.56" dyno= connect= service= status=503 bytes=
2016-12-16T12:21:01.504908+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=ai-blog.herokuapp.com request_id=cc0c4f9b-f3af-4867-942f-0c7f295f9b90 fwd="82.46.0.56" dyno= connect= service= status=503 bytes=
2016-12-16T12:21:03.381794+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=ai-blog.herokuapp.com request_id=ee190254-0159-4ba0-aa74-6e58f661c966 fwd="82.46.0.56" dyno= connect= service= status=503 bytes=

这里错误的重要部分似乎是密码失败:但我已经加倍并且三倍检查所有heroku变量都设置正确,即没有拼写错误,没有添加额外的空格开始字符串的结尾。

此外,该应用程序在本地运行良好。

这个问题似乎比较常见,但我已尝试过其他帖子的大多数解决方案,似乎没有解决问题。

我尝试过的解决方案:

  • 检查所有变量的拼写错误
  • 检查了正确的数据库是否已升级
  • 手动将用户凭证添加到远程数据库(出于某种原因,我仍然可以通过命令行访问远程数据库)
  • 执行以下命令heroku config:set PGSSLMODE=require
  • 确保我在通过浏览器连接到网站时在网址中使用https
  • 我已将以下内容添加到config.js ssl: true
  • 的生产环境中的db params中
  • 我还检查了我在生产环境中的情况

我没有尝试过的假设:

  • 有人建议需要更新节点。但我无法通过任何方式更新heroku使用的任何节点版本。
  • Somone建议postgres需要更新。但我无法在heroku服务器上看到任何更新方式。但是,我确实将package.json文件中的版本号从4.1.1更新到4.5.5,并将它从optionalDependencies更改为依赖项。
  • 编辑pg_hba.conf - 再次,我想这个文件存在于heroku服务器上,我无法访问它

有人有任何想法吗?

1 个答案:

答案 0 :(得分:1)

尝试升级到Ghost版本0.11.3并部署到Heroku时遇到同样的问题。

我能够通过升级PostgreSQL npm包来解决问题。

package.json

{
  "dependencies": {
    "pg": "^4.5.5",
  },
  "optionalDependencies": {
    "pg": "^4.5.5"
  }
}

您还需要修改npm-shrinkwrap.json文件:

{
  "dependencies": {
    "pg": {
      "version": "^4.5.5",
      "from": "pg@4.5.5",
      "resolved": "https://registry.npmjs.org/pg/-/pg-4.5.5.tgz",
      "dependencies": {...}
    }
  }
}

之后,通过查看Heroku的部署日志,检查PG npm软件包版本是否已正确更新。它应该说:

remote: -----> Build succeeded!
remote:        ├── ...
remote:        ├── pg@4.5.5
remote:        ├── ...