简体   繁体   中英

Sequelize gets stuck connecting to heroku postgres database

there are tons of questions like this on SO but none of them really have the same problem.

I'm trying to connect to a Postgres DB with sequelize and locally it works with the DB hosted on heroku. It did also work a couple of days ago, but now it doesn't and looking at the diffs nothing changed in the way the app connects to the database.

When I deploy the app, it gets stuck trying to connect to the DB, until the web worker throws a timeout because the app does not bind to a port. This makes it hard to debug, since I don't have an error to work with.

  async connect(): Promise<void> {
    const dbUrl = process.env.DATABASE_URL as string

    if (!dbUrl) {
      throw new Error('Cannot connect to database, url not set!')
    }

    logger.info(`connecting to database ${dbUrl.replace(/:(\w+)@/, ':***@')}`)

    this.sequelize = new Sequelize(dbUrl, {
      dialect: 'postgres',
      protocol: 'postgres',
      logging: (sql, timing) => {
        logger.debug(`Executed SQL query '${sql}' in ${timing} ms`)
      },
      dialectOptions: {
        decimalNumbers: true,
        ssl: true
      }
    })
    
    // it gets stuck here
    await this.sequelize.authenticate({
      logging: (sql, timing) => {
        logger.debug(`authentication ${sql}, ${timing}`)
      }
    })
    logger.info('Database connection successful')

    logger.info('initializing models...')
    await this.initializeModels(this.sequelize)
    logger.info('synching database...')
    await this.sequelize.sync({
      alter: true,
      logging: (sql, timing) => {
        logger.debug(`Executed SQL query '${sql}' in ${timing} ms`)
      }
    })
  }

Here the log output:

ct 23 02:59:34 staging-monk-backend heroku/web.1 State changed from crashed to starting
Oct 23 02:59:40 staging-monk-backend heroku/web.1 Starting process with command `npm start`
Oct 23 02:59:43 staging-monk-backend app/web.1
Oct 23 02:59:43 staging-monk-backend app/web.1 > 8bit-bot-backend@1.0.0 start /app
Oct 23 02:59:43 staging-monk-backend app/web.1 > node build/main.js
Oct 23 02:59:43 staging-monk-backend app/web.1
Oct 23 02:59:44 staging-monk-backend app/web.1 2020-10-23T09:59:44.371Z [info] : NODE_ENV is production 
Oct 23 02:59:44 staging-monk-backend app/web.1 2020-10-23T09:59:44.375Z [info] : debug mode is off  
Oct 23 02:59:44 staging-monk-backend app/web.1 2020-10-23T09:59:44.375Z [info] : connecting to database postgres://rlbditxvnovvvq:***@ec2-54-246-87-132.eu-west-1.compute.amazonaws.com:5432/dd1v94insrdacc 
Oct 23 02:59:45 staging-monk-backend app/api Build succeeded
Oct 23 03:00:40 staging-monk-backend heroku/web.1 Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
Oct 23 03:00:40 staging-monk-backend heroku/web.1 Stopping process with SIGKILL
Oct 23 03:00:41 staging-monk-backend heroku/web.1 Process exited with status 137
Oct 23 03:00:41 staging-monk-backend heroku/web.1 State changed from starting to crashed

The Procfile:

web:npm start

Versions

  • pg : 7.5.0
  • sequelize : 6.3.5

This issue pointed me in the right direction. The problem was the pg package version, after upgrading to 8.4.1 everything works again.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM