守护模式 数据库报错 There is no active transaction ,debug模式没问题 ,求解~

jyolo

守护模式 数据库报错 There is no active transaction ,
debug模式没问题 ,求解~

3060 4 0
4个回答

walkor

不要在Worker::runAll();运行前初始化数据链接。

  • jyolo 2016-12-24

    请问那应该放在那里?onworker_start ?

jyolo

请问那应该放在那里?onworker_start ?

  • 暂无评论
walkor

可以

  • jyolo 2016-12-24

    非常感谢~ 已尝试,并且好了!再次感谢~~~~

walkor

不客气。

这个问题的原因是Worker::runAll();运行前执行的代码都属于主进程,主进程初始化数据链接后进入daemon模式是会fork子进程,然后将主进程退出。fork的子进程会继承主进程的数据库连接,但是因为主进程退出了,那么这个数据库连接会被mysql服务端关闭,那么子进程继承的数据库连接随之关闭,导致问题。

手册 开发前必读 中有强调这些
http://doc3.workerman.net/development/before-development.html

  • jyolo 2016-12-24

    oh~ 原来如此!学习了~

年代过于久远,无法发表回答
🔝