守护模式 数据库报错 There is no active transaction , debug模式没问题 ,求解~
不要在Worker::runAll();运行前初始化数据链接。
请问那应该放在那里?onworker_start ?
可以
非常感谢~ 已尝试,并且好了!再次感谢~~~~
不客气。
这个问题的原因是Worker::runAll();运行前执行的代码都属于主进程,主进程初始化数据链接后进入daemon模式是会fork子进程,然后将主进程退出。fork的子进程会继承主进程的数据库连接,但是因为主进程退出了,那么这个数据库连接会被mysql服务端关闭,那么子进程继承的数据库连接随之关闭,导致问题。
手册 开发前必读 中有强调这些 http://doc3.workerman.net/development/before-development.html
oh~ 原来如此!学习了~
不要在Worker::runAll();运行前初始化数据链接。
请问那应该放在那里?onworker_start ?
请问那应该放在那里?onworker_start ?
可以
非常感谢~ 已尝试,并且好了!再次感谢~~~~
不客气。
这个问题的原因是Worker::runAll();运行前执行的代码都属于主进程,主进程初始化数据链接后进入daemon模式是会fork子进程,然后将主进程退出。fork的子进程会继承主进程的数据库连接,但是因为主进程退出了,那么这个数据库连接会被mysql服务端关闭,那么子进程继承的数据库连接随之关闭,导致问题。
手册 开发前必读 中有强调这些
http://doc3.workerman.net/development/before-development.html
oh~ 原来如此!学习了~