Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Версия Laravel - 8.1.0
Локальный сервер:
OC Windows
XAMMP 7.4.8
PHP 7.4.8
Рабочий сервер
ОС Linux Centos 7
PHP 7.4.8
Добрый вечер.
Настроил отправку push уведомлений по данной инструкции https://www.tutofox.com/laravel/laravel … ts-pusher/
.env
BROADCAST_DRIVER=pusher
CACHE_DRIVER=file
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120
PUSHER_APP_ID=code
PUSHER_APP_KEY=code
PUSHER_APP_SECRET=code
PUSHER_APP_CLUSTER=eu
app/config/broadcasting.php
'default' => env('BROADCAST_DRIVER', 'null'),
'pusher' => [
'driver' => 'pusher',
'key' => env('PUSHER_APP_KEY'),
'secret' => env('PUSHER_APP_SECRET'),
'app_id' => env('PUSHER_APP_ID'),
'options' => [
'cluster' => 'eu',
'useTLS' => true
],
],
app/Events/Notifications.php
<?php
namespace App\Events;
use Illuminate\Broadcasting\Channel;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
class Notifications implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
/**
* Create a new event instance.
*
* @return void
*/
public $data;
public function __construct($data)
{
$this->data = $data;
}
public function broadcastOn()
{
return ['mi-sbs-notification'];
}
public function broadcastAs()
{
return 'event-pusher';
}
}
Команда вызывающая событие
event(new Notifications($message));
На локальном сервере всё отрабатывает нормально, а вот на продакшене все сообщения записываются в лог файлы
[2020-09-14 14:53:58] local.INFO: Broadcasting [event-pusher] on channels [mi-sbs-notification] with payload:
{
"data": {
текст сообщения
},
"socket": null
}
Google и Яндекс уже перерыл. Помогите, пож-та, разобраться
Изменено Vladimir_user (14.09.2020 18:18:33)
Не в сети
Ещё заметил, что время указанное в логах на продакшене на 2 часа меньше, чем серверное. Даже пробовал менять время на сервере - время в логах всё равно на 2 часа меняется в меньшую сторону
Не в сети
Я бы дважды проверил .env на продакшене. Кроме того, сделал бы php artisan config:clear и php artisan cache:clear
Про время: проверь часовой пояс. просто вызови в консоли date
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети
Спасибо за ответ.
Я бы дважды проверил .env на продакшене
Я уже 3-ё суток его перепроверяю)))
Пробовал разные комбинации.
Также в файле app/config/broadcasting.php прописывал ключи вручную - не помогло.
Запускал на локалке и сервере команды
$ php artisan tinker
config('broadcasting');
Результаты идентичны
Также заметил особенность. Если на локалке в файле .env указать не верный ключ, то при вызове события выдаёт исключение
Illuminate\Broadcasting\BroadcastException: Pusher error: 400. in file D:\xammp\htdocs\step-by-step.loc\vendor\laravel\framework\src\Illuminate\Broadcasting\Broadcasters\PusherBroadcaster.php on line 121
Если тоже самое сделать на продакшене, то ошибок не выдаёт. Такое ощущение, что на продакшене вообще игнорируется файл app/config/broadcasting.php и сразу все сообщения пишет в log файл.
Кроме того, сделал бы php artisan config:clear и php artisan cache:clear
Запускал и не раз))) Также чистил всё что только можно очистить с помощью команд
php artisan optimize&&php artisan cache:clear&&php artisan route:cache&&php artisan view:clear&&php artisan config:cache&&php artisan config:clear
Help me please!!!
Не в сети
Вопрос закрыт.
Я заменил ShouldBroadcast на ShouldBroadcastNow в событии
<?php
namespace App\Events;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcastNow;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
class Notifications implements ShouldBroadcastNow
{
use Dispatchable, InteractsWithSockets, SerializesModels;
/**
* Create a new event instance.
*
* @return void
*/
public $data;
public function __construct($data)
{
$this->data = $data;
}
public function broadcastOn()
{
return ['mi-sbs-notification'];
}
public function broadcastAs()
{
return 'event-pusher';
}
}
После этого всё заработало
Изменено Vladimir_user (16.09.2020 16:33:32)
Не в сети