[英]Knex Heroku server connection issues to postgres db - Node.js
我正在尝试使用 GraphQL 和 Knex 运行我的 node-express 服务器,并将其连接到 heroku 中的 PostgresQL 数据库。
当我运行 heroku bash CLI 并尝试迁移时,我收到此错误
~ $ npm run migrate
> syncify-server@0.0.0 migrate /app
> knex migrate:latest
Using environment: staging
Error: connect ECONNREFUSED 127.0.0.1:5432
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1141:16)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! syncify-server@0.0.0 migrate: `knex migrate:latest`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the syncify-server@0.0.0 migrate script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /app/.npm/_logs/2020-06-21T00_20_17_455Z-debug.log
它在本地开发中运行良好。 我的 knex.js 文件
import dotenv from 'dotenv'
import knex from 'knex'
import mockKnex from 'mock-knex'
dotenv.config()
let knexConnection
if (process.env.NODE_ENV === 'test') {
knexConnection = knex({
client: 'pg',
debug: false,
})
mockKnex.mock(knexConnection)
} else {
knexConnection = knex({
client: 'pg',
connection: {
url: process.env.DATABASE_URL,
type: 'postgres',
charset: 'utf8',
ssl: false
},
})
}
export default knexConnection
和 knexfile.js
require('dotenv').config()
module.exports = {
development: {
client: 'pg',
connection: {
url: process.env.DATABASE_URL,
charset: 'utf8',
},
},
staging: {
client: 'pg',
connection: {
url: process.env.DATABASE_URL,
charset: 'utf8',
},
pool: {
min: 2,
max: 10,
},
migrations: {
tableName: 'knex_migrations',
},
},
production: {
client: 'pg',
connection: {
url: process.env.DATABASE_URL,
charset: 'utf8',
},
pool: {
min: 2,
max: 10,
},
migrations: {
tableName: 'knex_migrations',
},
},
}
我一直在试图找出问题所在,但感觉可能不止一个。
在配置变量中,我将DATABASE_URL
作为 heroku psql db URL 和NODE_ENV
作为“暂存”以及所有 auth0 设置。
我可以在命令行中使用psql
访问在线数据库。 我有正确的表,可以使用 SQL 语句创建和检索数据。
当我将本地服务器配置为使用 heroku psql db 时,如果我尝试数据库中的其他表,我会收到错误消息relation "users" does not exist
。
我已经尝试将我的 SSL 更改为 true ,这会引发错误,而更改为 false 似乎没有任何伤害。 (我尝试了很多其他的东西)
如果我点击在线 heroku 服务器,它只会抛出一个没有任何细节的通用错误。
源代码在这里
在为此失去几天之后,我已经修复了它。
经典环境变量错误。 我没有在我的配置中包含AUTH0_ISSUER
,这是在前一段时间的更新中实现的,但是在第一次部署到 heroku 之后。
此外,尽管将我的 knex 文件配置为使用DATABASE_URL
,但它并没有拾取它,并且只有在我使用所有五个单独设置时才连接到数据库。
DB_NAME=
DB_USER=
DB_PASSWORD=
DB_HOST=
DB_PORT=
我不知道为什么,但是我在'./dist'中有server.js文件,这些文件在缩小的代码中引用了这些文件,所以我猜它必须但不知何故已经转译以使用它,我有点卡住了。 更喜欢使用DATABASE_URL
因为我认为 heroku 会不时动态更新此值,并且不确定如何保护我的服务器免受此影响。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.