当我composer install在命令提示符上运行时,会出现如下错误:
Problem 1
- Installation request for laravel/horizon v1.1.0 -> satisfiable by laravel/horizon[v1.1.0].
- laravel/horizon v1.1.0 requires ext-pcntl * -> the requested PHP extension pcntl is missing from your system.
To enable extensions, verify that they are enabled in your .ini files:
- C:\xampp-7.1\php\php.ini
You can also run `php --ini` inside terminal to see which files are used by PHP in CLI mode.
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个错误?
我正在使用Laravel构建API,并希望使用Laravel Notifications系统发送推送通知.我有一个匹配模型(基本上是一个帖子),另一个用户可以喜欢这个匹配.当喜欢匹配时,帖子的创建者将获得推送通知.它就像Instagram,Facebook等.
推送通知通常不会发送给用户.我安装了Laravel Horizon以查看是否存在错误.有时通知是发送的,有时则不是.使用完全相同的数据:
通知有时会使用完全相同的数据(相同的用户,相同的匹配)失败.
错误如下:
Illuminate\Database\Eloquent\ModelNotFoundException:/home/forge/owowgolf.com/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php:312中的模型[App\Models\Match] 118没有查询结果
我确定匹配和用户存在于数据库中,我在发送通知之前已经验证过.有人知道出了什么问题吗?我在网上找到的一切都是人们在将通知发送到队列之前没有保存他们的模型.但是,如果模型不存在,则甚至无法到达代码将通知发送到队列中的行.由于路由/控制器中的隐式绑定.
控制器方法:
/**
* Like a match.
*
* @param \App\Models\Match $match
* @return \Illuminate\Http\JsonResponse
*/
public function show(Match $match)
{
$match->like();
$players = $match->players()->where('user_id', '!=', currentUser()->id)->get();
foreach ($players as $user) {
$user->notify(new NewLikeOnPost($match, currentUser()));
}
return ok();
}
Run Code Online (Sandbox Code Playgroud)
通知:
<?php
namespace App\Notifications;
use App\Models\Match;
use App\Models\User;
use Illuminate\Bus\Queueable;
use NotificationChannels\Apn\ApnChannel;
use NotificationChannels\Apn\ApnMessage;
use Illuminate\Notifications\Notification;
use Illuminate\Contracts\Queue\ShouldQueue;
class NewLikeOnPost extends Notification implements ShouldQueue
{
use Queueable;
/**
* The match instance.
* …Run Code Online (Sandbox Code Playgroud) 我在Horizon中使用Laravel队列和Redis。主管正在运行artisan horizon,这反过来会产生进程/usr/bin/php7.2 artisan horizon:work redis
是否需要完全运行queue:work,或者Horizon 是否可以自行处理队列?
我的问题是,运行Laravel Horizon工作人员的最佳和简单方法是什么?
我的技术堆栈
我已经阅读了文档https://laravel.com/docs/5.5/horizon
如何在Supervisor配置上方的链接上提到设置以下主管
[program:horizon]
process_name=%(program_name)s
command=php /home/forge/app.com/artisan horizon
autostart=true
autorestart=true
user=forge
redirect_stderr=true
stdout_logfile=/home/forge/app.com/horizon.log
Run Code Online (Sandbox Code Playgroud)
注意:我有自己的自定义构建服务器和php 7.1,后来我安装了Horizon来运行我的作业并维护队列.
有关如何运行Workers的任何建议或我应该在何处配置Supervisor配置?
我只是安装了 laravel-horizon 并且已经使用它进行了测试,一切正常,但是我不知道如何编辑 laravel 地平线视图,
以上是我的 laravel-horizon 的概述,任何人都可以帮助我如何编辑它?
因为似乎laravel为此使用了vue js,而我并不是很熟悉
我已经按照文档成功安装并设置了 laravel-horizon
当我运行这个命令时php artisan horizon
它抛出以下错误:
Symfony\Component\Debug\Exception\FatalThrowableError :调用未定义函数 Laravel\Horizon\Console\pcntl_async_signals()
当我打开http://127.0.0.1:8000/horizon/ dashboard 时,地平线仪表板状态始终处于非活动状态
我使用 XAMPP ,PHP 版本 7.3.0 ,Laravel 版本 5.7
我已关注此链接:https://github.com/laravel/horizon /issues/154#issuecomment-366712260
composer require ext-pcntl ext-posix
这是作曲家:
"require": {
"php": "^7.1.3",
"ext-pcntl": "^7.2",
"ext-posix": "^7.2",
"fideloper/proxy": "^4.0",
"laravel/framework": "5.7.*",
"laravel/horizon": "^2.0",
"laravel/socialite": "^4.0",
"laravel/tinker": "^1.0",
"predis/predis": "^1.1",
},
Run Code Online (Sandbox Code Playgroud)
我搜索了很多问题,但没有运气,也尝试过composer update --ignore-platform-reqs但仍然不起作用。
有人请帮助我在本地系统中运行 Laravel Horizon
Laravel Horizon 中maxProcesses、 的数量supervisors和 s 的总数之间是否有任何经验法则或任何逻辑关系?queue
如果我有 15 个主管和 40 个队列(每个主管根据其类别有多个队列)怎么办?maxProcesses我可以分配给每个主管的最大数量是多少(假设平衡auto)?
我想知道是否有通过调整这些数字来获得更好性能的经验法则,例如,队列的数量是否supervisor-x不应超过队列总数,以及maxProcesses基于操作系统规范的数量是否不应超过特定数量运行进程。
这些数字之间有什么逻辑关系吗?有没有关于这个问题的好的文档?我已经在主管和Laravel Horizon 文档上看过这篇文档,但还没有找到我的问题的答案。
今天升级到Laravel 5.6之后,我遇到了很多Redis错误,它们都说明:
Error while reading line from the server. [tcp://redis.localhost:6379] {"exception":"[object] (Predis\\Connection\\ConnectionException(code: 0): Error while reading line from the server. [tcp://redis.localhost:6379] at /var/www/manage.localhost/vendor/predis/predis/src/Connection/AbstractConnection.php:155)
Run Code Online (Sandbox Code Playgroud)
该应用程序堆栈包括:
在5.5上一切都运行顺利,我找到的所有文档似乎都无法解决这种情况。除了某些缓存使用之外,没有通过整个外观或应用程序中的服务容器使用Redis。
还有其他人遇到过吗?我已对升级指南以及GitHub发行说明进行了三遍检查,但没有发现任何可疑之处。基于堆栈跟踪,它似乎与Horizon有关。
全栈跟踪
#0 /var/www/manage.localhost/vendor/predis/predis/src/Connection/StreamConnection.php(314): Predis\\Connection\\AbstractConnection->onConnectionError('Error while rea...')
#1 /var/www/manage.localhost/vendor/predis/predis/src/Connection/AbstractConnection.php(120): Predis\\Connection\\StreamConnection->read()
#2 /var/www/manage.localhost/vendor/predis/predis/src/Connection/AbstractConnection.php(112): Predis\\Connection\\AbstractConnection->readResponse(Object(Predis\\Command\\ListPopFirstBlocking))
#3 /var/www/manage.localhost/vendor/predis/predis/src/Client.php(331): Predis\\Connection\\AbstractConnection->executeCommand(Object(Predis\\Command\\ListPopFirstBlocking))
#4 /var/www/manage.localhost/vendor/predis/predis/src/Client.php(314): Predis\\Client->executeCommand(Object(Predis\\Command\\ListPopFirstBlocking))
#5 /var/www/manage.localhost/vendor/laravel/framework/src/Illuminate/Redis/Connections/Connection.php(96): Predis\\Client->__call('blpop', Array)
#6 /var/www/manage.localhost/vendor/laravel/framework/src/Illuminate/Redis/Connections/Connection.php(108): Illuminate\\Redis\\Connections\\Connection->command('blpop', Array)
#7 /var/www/manage.localhost/vendor/laravel/framework/src/Illuminate/Queue/RedisQueue.php(230): Illuminate\\Redis\\Connections\\Connection->__call('blpop', Array)
#8 /var/www/manage.localhost/vendor/laravel/framework/src/Illuminate/Queue/RedisQueue.php(213): Illuminate\\Queue\\RedisQueue->blockingPop('queues:events')
#9 /var/www/manage.localhost/vendor/laravel/framework/src/Illuminate/Queue/RedisQueue.php(165): Illuminate\\Queue\\RedisQueue->retrieveNextJob('queues:events')
#10 /var/www/manage.localhost/vendor/laravel/horizon/src/RedisQueue.php(92): Illuminate\\Queue\\RedisQueue->pop('events')
#11 /var/www/manage.localhost/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(246): Laravel\\Horizon\\RedisQueue->pop('events')
#12 /var/www/manage.localhost/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(107): Illuminate\\Queue\\Worker->getNextJob(Object(Laravel\\Horizon\\RedisQueue), 'events') …Run Code Online (Sandbox Code Playgroud) Horizon 运行良好,但直到最近,部署后,主管和队列工作人员不会再次启动,Horizon GUI 显示“非活动”
为了让它们再次运行,我可以:
/etc/init.d/supervisor restart我的部署脚本包含php artisan horizon:terminate在其中。我还尝试过重置/清除及其组合。
当我在具有非活动地平线的命令中运行终止时,它似乎什么也没做。当我在 Horizon Active 下运行相同的命令时,它会将其关闭,但守护进程不会重新启动 Supervisor。
守护进程在整个过程中运行没有任何错误。
应该终止并启动服务还是守护进程本身?
我们的 Laravel 应用程序在 Kubernetes 中有两个不同的 Pod,
问题是当我检查地平线仪表板时,它显示“活动”,我可以在“待处理作业”部分看到作业,但它们从未真正执行过。他们只是坐在那里闲着。
现在,当我在运行 apache 的 pod 中使用 SSH 并手动运行命令“php artisan horizon”时,它实际上会执行所有挂起的作业。
我已经确保了以下几点:
laravel-horizon ×10
laravel ×8
php ×7
laravel-5 ×3
laravel-5.5 ×2
redis ×2
composer-php ×1
daemon ×1
docker ×1
forge ×1
kubernetes ×1
laravel-5.7 ×1
laravel-jobs ×1
process ×1
queue ×1
supervisord ×1
symfony ×1
vue.js ×1
worker ×1
xampp ×1