【发布时间】:2018-07-01 11:58:24
【问题描述】:
我正在使用 CircleCI 为 node.js 项目(节点 8.9)运行测试/构建。我必须使用机器执行器,因为我需要 ipv6 支持,并且我还使用 postgres 运行我的测试。本地 postgres 实例使用 docker (docker run -d -p \"5432:5432\" postgres:9.6) 运行。我正在使用pg@7.4.1 连接到 postgres。
我有一个脚本,用于设置测试数据库(用户、数据库等),该脚本在 postgres 容器启动后在后续步骤中运行。在构建中运行此脚本时,我收到以下错误:
Connecting to PG
Error occurred Error: Connection terminated unexpectedly
at Connection.con.once (/home/circleci/converge-ingest/node_modules/pg/lib/client.js:179:21)
at Object.onceWrapper (events.js:313:30)
at emitNone (events.js:106:13)
at Connection.emit (events.js:208:7)
at Socket.<anonymous> (/home/circleci/converge-ingest/node_modules/pg/lib/connection.js:122:10)
at emitNone (events.js:111:20)
at Socket.emit (events.js:208:7)
at endReadableNT (_stream_readable.js:1055:12)
at _combinedTickCallback (internal/process/next_tick.js:138:11)
at process._tickCallback (internal/process/next_tick.js:180:9)
Exited with code 1
如果我尝试通过 SSH 重建并手动运行脚本,它工作正常。我已经转储并比较了构建和 SSH 会话之间的环境,差异很小且完全不相关,因此不会产生任何影响。我还尝试强制我的脚本等待 2 秒,以防 postgres 实例尚未完成启动。这些都没有帮助。
我不确定还可以做些什么来调试这个问题,因为当我在 CircleCI 上的 VM 中运行脚本时它可以工作。
我是否缺少某些东西会导致这些行为的行为如此不同?
【问题讨论】:
-
这是一个在 CircleCI 讨论中提出的好问题。我的第一个想法是,在 Postgres/Docker 完全初始化之前,该脚本正在尝试连接。我会尝试添加一些延迟,或者等待端口打开并准备好。
-
@FelicianoTech 正如我在问题中指出的那样,我尝试添加延迟。事实证明这不是问题 - 我已经在我的答案中详细说明了解决方案(尽管它仍然有点奇怪)。
-
啊,这对我来说并不明显。感谢您回来回答。
标签: node.js postgresql circleci node-postgres