Knex 池已满迁移
Knex pool full on migration
我正在尝试开始使用 knex.js,但无法进行迁移。 Knex 适用于我的 API 电话。这是我的设置:
knexfile.js
const env = process.env;
module.exports = {
client: 'mysql',
connection: {
host: env.DB_HOST,
database: env.DB_NAME,
user: env.DB_USER,
password: env.DB_PASSWORD,
port: env.PORT
},
pool: {
min: 0,
max: 50
},
migrations: {
directory: './db/migrations',
tableName: 'knex_migrations'
},
seeds: {
directory: './db/seeds'
}
};
knex.js
const config = require('../knexfile.js');
module.exports = require('knex')(config);
events.js
const express = require('express');
const router = express.Router();
const knex = require('../../db/knex.js');
// GET api/events
router.get('/', (req, res) => {
knex('events')
.then(events => { res.send(events) }
.catch(err => { console.log(err); })
});
module.exports = router;
然后我在迁移文件夹中有一个文件:
exports.up = function(knex) {
return knex.schema.createTable('users', function (t) {
t.increments('id').primary()
t.string('username').notNullable()
t.string('password').notNullable()
t.timestamps(false, true)
}).then(() => { console.log('created users table') })
.catch((err) => { throw err} )
.finally(() => { knex.destroy() })
};
exports.down = function(knex) {
return knex.schema.dropTableIfExists('users')
};
当我 运行 knex migrate:latest
我得到 TimeoutError: Knex: Timeout acquiring a connection. The pool is probably full. Are you missing a .transacting(trx) call?
我知道以前有人问过类似的问题,但我似乎找不到任何能说明我的特殊情况的问题。我尝试在 GET 请求的末尾添加 knex.destroy()
但这似乎没有帮助(如果我在下面添加其他请求处理程序,它只会使连接无法使用)。
我确实尝试检查 GET 请求末尾的 finally
子句中的 knex.client.pool
。 numUsed
为 0,numFree
为 1,numPendingAcquires
和 numPendingCreates
均为 0。鉴于我的 knexfile 指定,numFree
仅为 1,我确实觉得很奇怪最多 50 个。非常感谢任何建议。
根据@technogeek1995 的评论,答案原来是将 require('dotenv').config({path: '../.env'});
添加到 knexfile.js
(回想起来,这部分似乎很明显),并且 运行 来自同一目录的 cli .希望这对其他人有帮助。
我正在尝试开始使用 knex.js,但无法进行迁移。 Knex 适用于我的 API 电话。这是我的设置:
knexfile.js
const env = process.env;
module.exports = {
client: 'mysql',
connection: {
host: env.DB_HOST,
database: env.DB_NAME,
user: env.DB_USER,
password: env.DB_PASSWORD,
port: env.PORT
},
pool: {
min: 0,
max: 50
},
migrations: {
directory: './db/migrations',
tableName: 'knex_migrations'
},
seeds: {
directory: './db/seeds'
}
};
knex.js
const config = require('../knexfile.js');
module.exports = require('knex')(config);
events.js
const express = require('express');
const router = express.Router();
const knex = require('../../db/knex.js');
// GET api/events
router.get('/', (req, res) => {
knex('events')
.then(events => { res.send(events) }
.catch(err => { console.log(err); })
});
module.exports = router;
然后我在迁移文件夹中有一个文件:
exports.up = function(knex) {
return knex.schema.createTable('users', function (t) {
t.increments('id').primary()
t.string('username').notNullable()
t.string('password').notNullable()
t.timestamps(false, true)
}).then(() => { console.log('created users table') })
.catch((err) => { throw err} )
.finally(() => { knex.destroy() })
};
exports.down = function(knex) {
return knex.schema.dropTableIfExists('users')
};
当我 运行 knex migrate:latest
我得到 TimeoutError: Knex: Timeout acquiring a connection. The pool is probably full. Are you missing a .transacting(trx) call?
我知道以前有人问过类似的问题,但我似乎找不到任何能说明我的特殊情况的问题。我尝试在 GET 请求的末尾添加 knex.destroy()
但这似乎没有帮助(如果我在下面添加其他请求处理程序,它只会使连接无法使用)。
我确实尝试检查 GET 请求末尾的 finally
子句中的 knex.client.pool
。 numUsed
为 0,numFree
为 1,numPendingAcquires
和 numPendingCreates
均为 0。鉴于我的 knexfile 指定,numFree
仅为 1,我确实觉得很奇怪最多 50 个。非常感谢任何建议。
根据@technogeek1995 的评论,答案原来是将 require('dotenv').config({path: '../.env'});
添加到 knexfile.js
(回想起来,这部分似乎很明显),并且 运行 来自同一目录的 cli .希望这对其他人有帮助。