Password authentication failing for ghost blog on heroku server

350 views Asked by At

I'm trying to setup Ghost(node.js blogging app) to run on a heroku server. I've followed this tutorial here but I'm getting an Application error when I load the app URL. Looking at the logs, I'm getting the following stack trace:

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=

It seems that the important part of the error here is that the password is failing: But I've double and tripled check the all of the heroku varibles are set correctly, i.e. no typos, no extra spaces added at the start end of the string.

Additionally, the app runs fine locally.

The issue seems relatively common, but I've tried most of the solutions from other posts and nothing seems to be resolving the issue.

Solutions that I've tried:

  • Checked all varibles for typos
  • Checked the correct database is promoted
  • Manually adding the user credendials to the remote database(For some reason I can still access the remote database through the command line)
  • Ran the following command heroku config:set PGSSLMODE=require
  • ensured that I'm using https in the url when connecting to the site through a browser
  • I've added the following to the db params in the production environment of my config.js ssl: true
  • I've also checked that I'm in production environment

Sugguestions that I haven't tried:

  • Someone suggested that node needs to be updated. But I can't see any way of updating whatever version of node it is that heroku uses.
  • Somone suggested that postgres needs to be updated. But I can't see any way of updating that on heroku servers either. However, I did update the version number in the package.json file from 4.1.1 to 4.5.5 and moved it from optionalDependencies to dependencies.
  • editing the pg_hba.conf - again, I imagine this file exists on heroku servers and I can't access it

Anyone got any ideas?

1

There are 1 answers

1
juangesino On BEST ANSWER

I encounter the same problem while trying to upgrade to Ghost version 0.11.3 and deploying to Heroku.

I was able to solve the problem by upgrading the PostgreSQL npm package.

In package.json:

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

And you will also need to modify the npm-shrinkwrap.json file:

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

After that, check that the PG npm package version was updated correctly by taking a look at Heroku's deploy log. It should say something like:

remote: -----> Build succeeded!
remote:        ├── ...
remote:        ├── [email protected]
remote:        ├── ...