我将gateway跟webman合在一起,但是在Events.php中使用数据库业务时报错,一直未找到原因,各位有遇到吗

BJ001

Error: Class 'support\Model' not found in D:\www\webman\app\admin\model\MemberModel.php:6
Stack trace:

0 D:\www\webman\vendor\composer\ClassLoader.php(444): include()

1 D:\www\webman\vendor\composer\ClassLoader.php(322): Composer\Autoload\includeFile('D:\www\webman\v...')

2 [internal function]: Composer\Autoload\ClassLoader->loadClass('app\admin\model...')

3 D:\www\webman\app\admin\service\MemberService.php(76): spl_autoload_call('app\admin\model...')

4 D:\www\webman\gateway\Events.php(91): app\admin\service\MemberService::memEdit(Array, Array)

5 [internal function]: Events::onClose('7f00000108fc000...')

6 D:\www\webman\vendor\workerman\gateway-worker\src\BusinessWorker.php(414): call_user_func('Events::onClose', '7f00000108fc000...')

7 D:\www\webman\vendor\workerman\workerman\Connection\TcpConnection.php(637): GatewayWorker\BusinessWorker->onGatewayMessage(Object(Workerman\Connection\AsyncTcpConnection), Array)

8 D:\www\webman\vendor\workerman\workerman\Events\Select.php(293): Workerman\Connection\TcpConnection->baseRead(Resource id #46)

9 D:\www\webman\vendor\workerman\workerman\Worker.php(2430): Workerman\Events\Select->loop()

10 D:\www\webman\vendor\workerman\gateway-worker\src\BusinessWorker.php(197): Workerman\Worker->run()

11 D:\www\webman\vendor\workerman\workerman\Worker.php(1417): GatewayWorker\BusinessWorker->run()

12 D:\www\webman\vendor\workerman\workerman\Worker.php(1360): Workerman\Worker::forkWorkersForWindows()

13 D:\www\webman\vendor\workerman\workerman\Worker.php(542): Workerman\Worker::forkWorkers()

14 D:\www\webman\gateway\start_businessworker.php(30): Workerman\Worker::runAll()

15 {main}

Worker process terminated
process D:\www\webman\gateway\start_businessworker.php terminated and try to restart
ChatBusinessWorker none

截图
截图

2596 9 0
9个回答

xamarin

我也刚刚遇到这个问题,正在克服中

  • BJ001 2021-05-25

    也不是说一定要将gateway和webman放一起,部署到两台服务器或者在一台服务器上也是可以的,当做两个项目开发。

xamarin

找个兄弟解决这个调用数据库的问题,付报酬200.我的QQ422800820,希望兄弟可以联系我.

  • 暂无评论
lscho

根据你的情况,有两个问题要解决。

1.DB 类所在的 support 命名空间并不是通过 composer 自动加载的,而是 webman 框架处理的,但是你用 gateway 的 Events 时候,并没用经过 webman 处理,所以要先解决 support 命名空间的问题。 在 composer.json 的 autoload 中加上support,如下:

   "autoload": {
    "psr-4": {
      "app\\": "app/",
      "support\\": "support/"
    },
    "files": [
      "./support/helpers.php"
    ]
  },

2.Db类并不能直接使用,而是在 webman 的 Bootstrap 中对 illuminate/database 又封装了一次,所以要把 Bootstrap 重新执行一下。在 BusinessWorker 的onWorkerStart中处理一下。

    foreach (config('bootstrap', []) as $class_name) {
        /** @var \Webman\Bootstrap $class_name */
        $class_name::start($worker);
    }

这样在Events中就能使用了。

详见附件。

  • BJ001 2021-05-25

    可能是因为属于两个域名的问题吧,毕竟webman开一个ip:port,gateway也开了一个,各自走各自的。虽然文件夹目录在一起,但是无法引用到

  • tang23 2021-05-26

    可以使用,谢谢

  • tang23 2021-05-26

    好像在BusinessWorker 不加 foreach的也是可以使用的

BJ001

按照这个试了下,依然报错

  • 暂无评论
xamarin

请教一下 你怎么操作的

  • 暂无评论
BJ001

我的也没有成功,今天再尝试下,不行的话就当做两个服务搞了。

  • 暂无评论
不败少龙

可以用url的方式去请求

  • BJ001 2021-05-28

    我已经将这两个独立开来,各自是个独立的服务

  • 不败少龙 2021-05-28

    哦!之前就是这样弄的

zjh

没有搞明白 为什么要在webman里面在使用getway呢 你再开启一个进程 不就好了??

  • 暂无评论
xamarin

https://wenda.workerman.net/question/6460 数据库加载项从webman中独立出来,单独初始化,可以和webnan一个时间启动.在webman 路径可以随便调用数据库,不需要初始化和在composer 里做额外的工作.webman 昨天的问题已完美解决,有类似的问题欢迎兄弟们交流.谢谢兄弟们.

  • 暂无评论
年代过于久远,无法发表回答
🔝