欢迎您访问我的笔记本站旨在于记录一些平时工作中遇到的一些问题和解决方法,方便查阅,部分内容来源于网络,如有侵权请联系我删除
  • 微信微信
您现在的位置是:首页 > PHP后端

TP5新建Workerman启动文件遇到的坑-[原创]

日期:2019-08-21 18:02:37 作者:tanyi 来源:我的笔记 浏览:1514 次
今天没事想通过workerman弄一个定时任务来定时执行代码备份数据库,因为前不久才弄过,所以觉得应该很快就可搞定,结果踩了一个坑弄了一两个小时

我tp的版本是5.0.24,(在linux服务器上没有这种问题)。

首先建一个workkerman服务器处理类,到时我的备份数据库操作将放在这里面,这只是一个简单的示例文件。

<?php

namespace app\worker\controller;

use think\worker\Server;

class Worker extends Server{


    public function onWorkerStart($worker){
        echo 'URL:'.request()->url().PHP_EOL;
        echo 'Module:'.request()->module();
    }
}

然后新建一个启动文件,server.php,和项目入口文件在同一级目录,即public下面。

<?php
define('APP_PATH', __DIR__ . '/../application/');
define('BIND_MODULE','worker/Worker');
// 加载框架引导文件
require __DIR__ . '/../thinkphp/start.php';

正常情况我们打开命令窗口去执行这个server.php,会显示成功,即应该显示为这样

image.png

但是今天很坑爹,一直提示这个错误。

image.png

从这个错误可以看出程序去访问的不是Worker类,而是Index,但是worker下面压根没有Index类,自然会报错,但是为什么它会去找Index,我前面绑定了是Worker类的,就是这个问题卡了我一个多小时,最后发现是我定义了一个访问首页的路由,是这样。

 '/'   => 'index/index',

经过调试发现执行脚本的时候确实是走了这个路由,取消这个路由就可以启动成功,但是这个路由我确实需要。所以不能删除。没办法,只有继续想起他办。

最后解决方法是给执行的这个脚本文件任意传一个参数,但是这个参数不能和你设置的路由冲突,因为我截取到传的这个参数在框架里面是该请求的url。但是很奇怪,我传了一个 / 参数过去,程序并没有走我设置的首页路由。但是传其他的字母组合,比如这样:/article ,则会走路由,这样就启动不了,最后启动成功是这样,(我传的斜杠 /)。

image.png

所以以后如果遇到这种奇葩问题先在后面随便给个参数,避免跟设置的首页路由冲突导致启动不了,至少可以先排除这样的情况。


原创文章转载时请注明原始出处,作者等相关信息

提交评论
评论列表