安装 Laravel/horizon 踩过的坑


报错

Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - laravel/horizon[v3.0.0, ..., v3.7.2] require ext-pcntl * -> it is missing from your system. Install or enable PHP's pcntl extension.
    - Root composer.json requires laravel/horizon ^3.0 -> satisfiable by laravel/horizon[v3.0.0, ..., v3.7.2].

To enable extensions, verify that they are enabled in your .ini files:
    - E:\phpstudy_pro\Extensions\php\php7.3.4nts\php.ini
You can also run `php --ini` in a terminal to see which files are used by PHP in CLI mode.
Alternatively, you can run Composer with `--ignore-platform-req=ext-pcntl` to temporarily ignore these required extensions.

问题原因

我们简单翻译一下提示信息就可以看到,整体说的是 laravel/horizon 依赖或者需要 ext-pcntl 拓展,我们可以在 php.ini 中修改并使用。这就是大概的意思,但是我去 php.ini 找了,没有找到。

解决办法

"config": {
        "preferred-install": "dist",
        "sort-packages": true,
        "optimize-autoloader": true,
        "platform": {
            "ext-pcntl": "7.2",
            "ext-posix": "7.2"
        }
    },

可以看到,我们可以在 composer.json 文件里面的 config 里面加上 platform 配置,楼主运行了一下,完美解决。可是这是为什么呢?从 stackoverflow 上找到了答案,该错误表明未安装 PCNTL PHP 扩展,并且 Horizon 需要提供此扩展的 PHP 环境。
PCNTL 扩展为 Unix 风格的进程管理和信令提供了一个 API。由于其固有的重点是仅在类似 Unix 或 Linux 的操作系统中可用的功能,因此此扩展不支持 Windows,如文档中所述:

注意:此扩展名在 Windows 平台上不可用。

通过此 API,Laravel Horizon 使用 PHP 7.1 新增的异步信号处理功能来管理队列工作进程。因此,Horizon 当前不支持 Windows,Windows 开发人员需要使用虚拟环境(例如 Homestead)来安装和运行 Horizon。
我们加上这两项就可以安装的原因就是我们设置忽略了版本匹配,如果有不对的地方,欢迎大家修改指正。
转载自

声明:小小博客|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - 安装 Laravel/horizon 踩过的坑


Carpe Diem and Do what I like