队列指定非app目录打包phar 后无法消费是为什么

kspade

redis queue 队列,指定了非app的消费目录

消费目录:run_path() ."/diy/queue"

正常php webman start
投递消息可以正常收到并消费

打包为phar 后不能消费 (打包时diy目录没有打包进phar)

程序代码或配置

    'redis_consumer_slow'  => [
        'handler'     => Webman\RedisQueue\Process\Consumer::class,
        'count'       => 8,
        'constructor' => [
            // 消费者类目录
            'consumer_dir' => run_path() . '/diy/queue'
        ]
    ]

重现问题的步骤

1.webman 根目录 新建一个文件夹:diy/queue

2.打包phar 时diy目录排除出来 (不打包进phar)

3.然后将:webman.phar 和 diy文件夹 同级,diy/queue 下面就是消费文件

php webman start 正常可以消费
php webman.phar start 无法消费

操作系统环境及workerman/webman等具体版本

linux ubuntu

312 2 0
2个回答

walkor

打包后自动加载是加载phar文件里的文件,无法自动加载磁盘里的文件。
所以你要手写一个自动加载逻辑,利用spl_autoload_register注册进去

  • kspade 2023-12-13

    不是你的队列路径替换的原因 base_path() 和 run_path() 的区别!

luobote

你现在掌握了xunruicms 的二次开发了没?

🔝