Heroku无法与Postgres DB / Knex / Express连接

时间:2019-02-21 14:23:46

标签: postgresql express heroku knex.js

我已将Express API部署到Heroku,但是当我尝试运行迁移时,它会引发以下错误:

  

heroku run knex migration:latest在⬢上运行knex migration:latest   bookmarks-node-api ... up,run.9925(免费)使用环境:   生产错误:连接ECONNREFUSED 127.0.0.1:5432       在TCPConnectWrap.afterConnect上[作为oncomplete](net.js:1117:14)

在我的knexfile.js中,我有:

production: {
    client: 'postgresql',
    connection: {
      database: process.env.DATABASE_URL
    },
    pool: {
      min: 2,
      max: 10
    },
    migrations: {
      directory: './database/migrations'
    }
  }

我还尝试将迁移目录分配给tableName: 'knex_migrations',这会引发错误:

  

heroku run knex migration:latest在⬢上运行knex migration:latest   bookmarks-node-api ...运行7739(免费)使用环境:   生产错误:ENOENT:没有这样的文件或目录,scandir   '/ app / migrations'

以下是Heroku中设置的配置:

-node-api git:(master) heroku pg:info
=== DATABASE_URL
Plan:                  Hobby-dev
Status:                Available
Connections:           0/20
PG Version:            10.7
Created:               2019-02-21 12:58 UTC
Data Size:             7.6 MB
Tables:                0
Rows:                  0/10000 (In compliance)
Fork/Follow:           Unsupported
Rollback:              Unsupported

我认为问题是由于某种原因,它正在查看数据库的localhost,就好像该环境显示为development一样,尽管跟踪显示为Using environment: production。 / p>

2 个答案:

答案 0 :(得分:0)

您应该检查是否按照these docs中的说明安装了Postgres附加组件,因为DATABASE_URL已按照here的要求自动为您设置。

答案 1 :(得分:0)

当您提供对象作为connection时,就是要提供连接信息的各个部分。在这里,您是说database的名称就是process.env.DATABASE_URL中包含的所有内容:

connection: {
  database: process.env.DATABASE_URL
},

您不提供任何值的键都会退回到默认值。一个示例是host键,默认为本地计算机。

但是DATABASE_URL环境变量在单个字符串中包含所有需要连接的信息(主机,端口,用户,密码和数据库名称)的 all That whole value should be your connection setting

connection: process.env.DATABASE_URL,