我已将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>
答案 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,