我正在尝试运行我的第一次迁移,它在 Heroku postgres 数据库中创建一个表。
当我尝试运行时
knex migrate:latest --env development
我收到错误
错误:无法获取连接
我尝试过的事情:
?ssl=true
添加到存储在 process.env.LISTINGS_DB_URL
中的连接字符串末尾,因为我知道这有时是与 heroku 连接的要求PGSSLMODE=require
我还偶然发现了这篇文章,其中有人评论说 knex 不会根据环境接受密钥。但是,我尝试按照本教程进行操作,这表明它确实如此。我还看到了许多其他参考资料,它们再次强化了这一点。
我还要补充一点,我已经能够从我的应用程序和外部客户端连接到数据库。我仅在尝试运行 knex 迁移时遇到此错误。
此外,我尝试确定如何检查作为连接字符串发送的内容。查看 knex 文档时:
如何调试常见问题
如果您将 {debug: true} 作为初始化中的选项之一传递 设置中,您可以看到所有正在进行的查询调用。
有人可以帮助指导我如何实际做到这一点吗?或者我已经在 knexfile.js 中成功完成了该操作?
相关文件:
// knex.js:
var environment = process.env.NODE_ENV || 'development';
var config = require('../knexfile.js')[environment];
module.exports = require('knex')(config);
// knexfile.js:
module.exports = {
development: {
client: 'pg',
connection: process.env.LISTINGS_DB_URL,
migrations: {
directory: __dirname + '/db/migrations'
},
seeds: {
directory: __dirname + '/db/seeds'
},
debug: true
},
staging: {
client: 'postgresql',
connection: {
database: 'my_db',
user: 'username',
password: 'password'
},
pool: {
min: 2,
max: 10
},
migrations: {
tableName: 'knex_migrations'
}
},
production: {
client: 'postgresql',
connection: {
database: 'my_db',
user: 'username',
password: 'password'
},
pool: {
min: 2,
max: 10
},
migrations: {
tableName: 'knex_migrations'
}
}
};
正如 @hhoburg 在下面的评论中指出的,错误
Error: Unable to acquire a connection
是一条通用消息,表明 Knex 客户端配置 存在问题。请参阅此处。
就我而言,Knex 没有在 knexfile.js 中引用
process.env.LISTINGS_DB_URL
,因为:
knex 问题跟踪器中详细介绍了正确的设置方法此处。
第1步:
首先安装dotenv:
npm i dotenv --save
在项目根目录下创建一个
.env
文件,添加:
DATABASE_URL=postgres://...
第2步:
在
knexfile.js
的开头添加:
require('dotenv').config();
将 postgres 连接更改为:
{
client: 'postgresql',
connection: process.env.DATABASE_URL,
pool: {
min: 0,
max: 15
},
migrations: {
directory: ...
},
seeds: {
directory: ...
}
}
我不确定这是否有帮助,但我今天在本地环境中开始遇到同样的问题。经过大量搜索后,我发现这是新的错误消息,表示连接配置无效或缺少连接池。在摆弄了太长时间之后,我切换了连接以使用我的 .env 文件作为配置环境;我一直在 knex.js 文件中使用硬编码字符串('dev'),但由于某种原因它不起作用。
您的 .env 文件工作正常吗?您是否尝试过修改池设置,并且您确定您的登台数据库和生产数据库的用户名和密码正确吗?
我希望该链接有帮助!
如果您在 Node.js 中遇到此错误,请尝试删除此行
myDb.destroy().then();
我在同样的情况下收到了同样的错误。结果我忘记在迁移之前配置数据库,因此没有任何可连接的内容。
要修复此错误,
跑步前:
heroku run knex migrate:latest
我运行了这个命令:
heroku addons:create heroku-postgresql
效果很好。
在运行相应的迁移之前尝试将数据更新到数据库时,我收到此错误。
我意识到在 Nodejs 中 env 变量是不可读的,所以你需要安装 dotenv 并配置它。我执行了以下步骤并且成功了。希望这对遇到问题的人有帮助
第1步:
npm i dotenv --save
第2步:创建.env文件并添加变量
//.env
DATABASE_URL=postgresql://postgres:[email protected]:5432/db_name
第3步:添加点环境配置
//server.js
require("dotenv").config();