Node.js sequelize.sync()期间的ETIMEDOUT

Node.js sequelize.sync()期间的ETIMEDOUT,node.js,sequelize.js,Node.js,Sequelize.js,因此,当我启动服务器时,大约有60%的时间会出现此错误 [2014-10-31T00:55:30.763Z] ERROR: main/4588 on vagrant-centos65.vagrantup.com: undefined (err.errorno=ETIMEDOUT, err.code=ETIMEDOUT, err.syscall=connect, err.fatal=true) Error: connect ETIMEDOUT at Connection._handleCo

因此,当我启动服务器时,大约有60%的时间会出现此错误

[2014-10-31T00:55:30.763Z] ERROR: main/4588 on vagrant-centos65.vagrantup.com: undefined (err.errorno=ETIMEDOUT, err.code=ETIMEDOUT, err.syscall=connect, err.fatal=true)
Error: connect ETIMEDOUT
    at Connection._handleConnectTimeout (/vagrant/node_modules/mysql/lib/Connection.js:346:13)
    at Socket.g (events.js:180:16)
    at Socket.emit (events.js:92:17)
    at Socket._onTimeout (net.js:326:8)
    at Timer.unrefTimeout [as ontimeout] (timers.js:427:13)
    at Protocol._enqueue (/vagrant/node_modules/mysql/lib/protocol/Protocol.js:135:48)
    at Protocol.handshake (/vagrant/node_modules/mysql/lib/protocol/Protocol.js:52:41)
    at Connection.connect (/vagrant/node_modules/mysql/lib/Connection.js:109:18)
    at /vagrant/node_modules/sequelize/lib/dialects/mysql/connection-manager.js:41:16
    at sequelizeResolver (/vagrant/node_modules/sequelize/lib/promise.js:32:12)
    at new Promise (/vagrant/node_modules/sequelize/node_modules/bluebird/js/main/promise.js:82:37)
    at new SequelizePromise (/vagrant/node_modules/sequelize/lib/promise.js:28:17)
    at ConnectionManager.connect (/vagrant/node_modules/sequelize/lib/dialects/mysql/connection-manager.js:23:10)
From previous event:
    at new Promise (/vagrant/node_modules/sequelize/node_modules/bluebird/js/main/promise.js:82:37)
    at new SequelizePromise (/vagrant/node_modules/sequelize/lib/promise.js:28:17)
    at ConnectionManager.connect (/vagrant/node_modules/sequelize/lib/dialects/mysql/connection-manager.js:23:10)
    at ConnectionManager.$connect (/vagrant/node_modules/sequelize/lib/dialects/abstract/connection-manager.js:200:41)
    at Object.pool.Pooling.Pool.create (/vagrant/node_modules/sequelize/lib/dialects/abstract/connection-manager.js:163:14)
    at createResource (/vagrant/node_modules/sequelize/node_modules/generic-pool/lib/generic-pool.js:261:13)
    at dispense (/vagrant/node_modules/sequelize/node_modules/generic-pool/lib/generic-pool.js:253:9)
    at Object.me.acquire (/vagrant/node_modules/sequelize/node_modules/generic-pool/lib/generic-pool.js:319:5)
From previous event:
    at new Promise (/vagrant/node_modules/sequelize/node_modules/bluebird/js/main/promise.js:82:37)
    at new SequelizePromise (/vagrant/node_modules/sequelize/lib/promise.js:28:17)
    at ConnectionManager.getConnection (/vagrant/node_modules/sequelize/lib/dialects/abstract/connection-manager.js:183:10)
    at module.exports.Sequelize.query (/vagrant/node_modules/sequelize/lib/sequelize.js:590:85)
    at module.exports.QueryInterface.createTable (/vagrant/node_modules/sequelize/lib/query-interface.js:151:29)
    at /vagrant/node_modules/sequelize/lib/model.js:413:34
From previous event:
    at module.exports.Model.sync (/vagrant/node_modules/sequelize/lib/model.js:408:20)
    at /vagrant/node_modules/sequelize/lib/sequelize.js:730:20
Possibly unhandled Error: undefined
    at Promise._settlePromiseAt (/vagrant/node_modules/sequelize/lib/promise.js:66:18)
From previous event:
    at module.exports.Sequelize.sync (/vagrant/node_modules/sequelize/lib/sequelize.js:713:22)
    at Object.<anonymous> (/vagrant/server.js:111:3)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)
[2014-10-31T00:55:30.763Z]错误:vagrant-centos65.vagrantup.com上的main/4588:未定义(err.errorno=ETIMEDOUT,err.code=ETIMEDOUT,err.syscall=connect,err.fatal=true)
错误:连接ETIMEDOUT
连接时。_handleConnectTimeout(/vagrant/node_modules/mysql/lib/Connection.js:346:13)
在Socket.g(events.js:180:16)
在Socket.emit(events.js:92:17)
在套接字上超时(net.js:326:8)
at Timer.unrefitmeout[as onttimeout](timers.js:427:13)
at协议。_排队(/vagrant/node_modules/mysql/lib/Protocol/Protocol.js:135:48)
在Protocol.handshake(/vagrant/node_modules/mysql/lib/Protocol/Protocol.js:52:41)
在Connection.connect(/vagrant/node_modules/mysql/lib/Connection.js:109:18)
at/vagrant/node_modules/sequelize/lib/dialogs/mysql/connection manager.js:41:16
在sequelizeResolver(/vagrant/node_modules/sequelize/lib/promise.js:32:12)
在新承诺中(/vagrant/node_modules/sequelize/node_modules/bluebird/js/main/Promise.js:82:37)
在新的SequelizePromise(/vagrant/node_modules/sequelize/lib/promise.js:28:17)
在ConnectionManager.connect(/vagrant/node_modules/sequelize/lib/dialogs/mysql/connection manager.js:23:10)
从以前的事件:
在新承诺中(/vagrant/node_modules/sequelize/node_modules/bluebird/js/main/Promise.js:82:37)
在新的SequelizePromise(/vagrant/node_modules/sequelize/lib/promise.js:28:17)
在ConnectionManager.connect(/vagrant/node_modules/sequelize/lib/dialogs/mysql/connection manager.js:23:10)
在ConnectionManager.$connect(/vagrant/node_modules/sequelize/lib/dialogs/abstract/connection manager.js:200:41)
在Object.pool.Pooling.pool.create(/vagrant/node_modules/sequelize/lib/dialogs/abstract/connection manager.js:163:14)
在createResource(/vagrant/node_modules/sequelize/node_modules/generic pool/lib/generic pool.js:261:13)
分发时(/vagrant/node_modules/sequelize/node_modules/generic pool/lib/generic pool.js:253:9)
在Object.me.acquire(/vagrant/node_modules/sequelize/node_modules/generic pool/lib/generic pool.js:319:5)
从以前的事件:
在新承诺中(/vagrant/node_modules/sequelize/node_modules/bluebird/js/main/Promise.js:82:37)
在新的SequelizePromise(/vagrant/node_modules/sequelize/lib/promise.js:28:17)
在ConnectionManager.getConnection(/vagrant/node_modules/sequelize/lib/dialogs/abstract/connection manager.js:183:10)
在module.exports.Sequelize.query(/vagrant/node_modules/Sequelize/lib/Sequelize.js:590:85)
在module.exports.QueryInterface.createTable(/vagrant/node_modules/sequelize/lib/query interface.js:151:29)
at/vagrant/node_modules/sequelize/lib/model.js:413:34
从以前的事件:
在module.exports.Model.sync(/vagrant/node_modules/sequelize/lib/Model.js:408:20)
at/vagrant/node_modules/sequelize/lib/sequelize.js:730:20
可能未处理的错误:未定义
在Promise._SettlePromission(/vagrant/node_modules/sequelize/lib/Promise.js:66:18)
从以前的事件:
在module.exports.Sequelize.sync(/vagrant/node_modules/Sequelize/lib/Sequelize.js:713:22)
反对。(/vagrant/server.js:111:3)
在模块处编译(Module.js:456:26)
在Object.Module.\u extensions..js(Module.js:474:10)
在Module.load(Module.js:356:32)
在Function.Module.\u加载(Module.js:312:12)
位于Function.Module.runMain(Module.js:497:10)
启动时(node.js:119:16)
其余40%的时间都没有问题。这只是在我切换到OSX时才开始发生的,但它都是在vagrant中运行的,所以这不重要。有什么想法吗

编辑: 所以我缩小了问题的范围。如果我在代码中的任何地方(甚至在开始时!)忙着等待约10秒,我就能重现错误,例如

“严格使用”;
对于(var i=0;i<1e10;i+=2){}
var express=require(。。。

因此,调用sequelize.sync()的时间似乎太长会导致此错误。但原因是什么?

这看起来sequelize无法成功连接到您的数据库,并且正在超时

首先,确保您的数据库正在实际运行,并且您可以使用与sequelize应用程序相同的连接参数从vagrant框进行连接。假设您正在运行MySQL,您可以通过以下方式进行连接:

vagrant ssh
然后从流浪汉的盒子里

mysql -usteven -pstevenspassword -hhostameofserver.com
这将至少确认应用程序能够连接到数据库

此外,如果数据库与应用程序运行在同一台计算机上,则可以尝试通过UNIX套接字连接,而不是通过网络连接,如下所示:

var sequelize = new Sequelize('database', 'username', 'password', {

    host: '127.0.0.1',
    port: 3306,
    logging: false,
    dialect: 'mysql',
    dialectOptions: {
        socketPath: '/var/run/mysql.sock'
    },
    pool: {
        maxConnections: 5,
        maxIdleTime: 30
    }

});

sequelize.sync()调用时所做的一件事是在数据库中创建表。我只能假设你的应用程序正在创建大量表,或者你的数据库运行得非常慢。我认为你需要发布更多的代码来确定你正在尝试做什么。
var sequelize = new Sequelize('database', 'username', 'password', {

    host: '127.0.0.1',
    port: 3306,
    logging: false,
    dialect: 'mysql',
    dialectOptions: {
        socketPath: '/var/run/mysql.sock'
    },
    pool: {
        maxConnections: 5,
        maxIdleTime: 30
    }

});