Sequelize .sync 函数挂起:来自 serial.klass 的发射器

Posted

技术标签:

【中文标题】Sequelize .sync 函数挂起:来自 serial.klass 的发射器【英文标题】:Sequelize .sync function hangs: emitter from serial.klass 【发布时间】:2013-08-23 17:21:47 【问题描述】:

我从我们的暂存环境中提取了一个应用程序,该应用程序在暂存计算机上完美运行,但在本地它挂在 sequelize.sync 函数上。

应用程序甚至没有到达“正在侦听端口...”

我通过Sequelize中的同步功能登录,发现这是卡住的地方:

(query-chainer.js 中的第 79 - 88 行)

var emitter = serial.klass[serial.method].apply(serial.klass, serial.params)

emitter.success(function(result) 
  self.serialResults[serialCopy.indexOf(serial)] = result

  if (serial.options.success) 
    serial.options.success(serial.klass, onSuccess)
   else 
    onSuccess()
  
).error(onError)

此函数不会返回到successerror。我不应该对他们的代码进行任何更改,因为我知道他们的库正在工作——我有一个可以工作的本地副本,我们正在重构,我只需要临时副本在我们完成时对生产进行快速更改重构。

有什么变化会导致这个问题?好像是连接问题?

我已验证主机为localhost,端口为5432。正确的usernamepassworddbName。全部通过:

sequelize = new Sequelize(config.db.dbName, config.db.username, config.db.password, 
    dialect: 'postgres',
    host: config.db.host,
    port: config.db.port,
    logging: false,
    define: sequelizeMethods
);

我还确认postgresql-x64-9.2 - PostgreSQL Server 9.2 服务正在运行。

有人对如何解决这个问题有任何想法吗?或者获取更多信息的方法?

【问题讨论】:

【参考方案1】:

您可以使用psql -d <dbname> -h localhost -U <username> -W 连接吗?

是否安装了pg@~2.0.0?如果是这样,它是安装在您的机器上还是只是通过node_modules 拉入的?

您是否尝试过npm install sequelize-postgres 并使用:

var Sequelize = require('sequelize-postgres').sequelize
var postgres  = require('sequelize-postgres').postgres

var sequelize = new Sequelize('database', 'username', 'password', 
  dialect: 'postgres'
)

postgresql 有日志输出吗?

【讨论】:

【参考方案2】:

根据您提供的信息很难说出原因。我想你应该调查一下

serial.klass[serial.method]

我猜应该有类似的东西

emitter.emit('success');

这可能没有发生,也没有发生错误。希望我能帮上忙。

【讨论】:

以上是关于Sequelize .sync 函数挂起:来自 serial.klass 的发射器的主要内容,如果未能解决你的问题,请参考以下文章

Sequelize model.sync() 抛出错误

为啥 sequelize.sync() 不同步表,除非我将模态导入文件?

如何将 sequelize.sync 选项强制设置为 false?

Sequelize sync() 不会创建所有的表模型

为啥这个简单的 Node, Sequelize Promise 代码会挂起?

node-sequelize学习笔记二(创建删除表安全检查表表列的数据类型)