postgresql - Heroku 无法与 Postgres DB/Knex/Express 连接
问题描述
我有一个 Express API 部署到 Heroku,但是当我尝试运行迁移时,它会引发以下错误:
heroku run knex migrate:latest Running knex migrate:latest on ⬢ bookmarks-node-api... up, run.9925(免费)使用环境:生产错误:在 TCPConnectWrap.afterConnect 连接 ECONNREFUSED 127.0.0.1:5432 [as 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 migrate:latest Running knex migrate:latest on ⬢ bookmarks-node-api... up, run.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
.
解决方案
当您提供一个对象作为您的对象时,您connection
将提供连接信息的各个部分。在这里,您是说您的名称database
是包含在的所有内容process.env.DATABASE_URL
:
connection: {
database: process.env.DATABASE_URL
},
您不提供值的任何键都将返回默认值。一个例子是host
密钥,它默认为本地机器。
但是DATABASE_URL
环境变量在一个字符串中包含了您需要连接的所有信息(主机、端口、用户、密码和数据库名称)。整个值应该是您的connection
设置:
connection: process.env.DATABASE_URL,
推荐阅读
- azure - Azure WebJob 代码未通过部署槽交换更新
- reactjs - 对于 Semantic-UI-React Loading 组件后面的这些单选切换,z-index 是否不正确?
- azure-cosmosdb - cosmosdb模拟器为什么会抛出这个错误以及如何解决?
- python - 替代循环遍历所有行熊猫
- javascript - 在同一个函数中使用两个类
- reactjs - 使用反应钩子从 API 重新获取数据
- javascript - 如何显示/隐藏而不是切换图标?
- perl - 在终端上打印脚本的结果(在后台运行)
- json - System.Text.Json.Deserialize 将数组转换为 C# 类
- python - Python dict key,value 返回多个值