BroadcastException 推送器 404 Laravel/Lumen
BroadcastException Pusher 404 Laravel/Lumen
问题
对于 Lumen 8 项目,我们正在尝试实施 Pusher。我们让它在 Docker 环境中本地工作,但是当我们转向 Kubernetes 时它就不再工作了。我们收到此错误:
[2021-05-27 17:56:36] production.ERROR: Pusher error: 404 NOT FOUND {"exception":"[object] (Illuminate\Broadcasting\BroadcastException(code: 0): Pusher error: 404 NOT FOUND at /var/www/html/vendor/illuminate/broadcasting/Broadcasters/PusherBroadcaster.php:122)
这意味着它抛出了这段代码:
114: if ($this->pusherServerIsVersionFiveOrGreater()) {
115: $parameters = $socket !== null ? ['socket_id' => $socket] : [];
116:
117: try {
118: $this->pusher->trigger(
119: $this->formatChannels($channels), $event, $payload, $parameters
120: );
121: } catch (ApiErrorException $e) {
122: throw new BroadcastException(
123: sprintf('Pusher error: %s.', $e->getMessage())
124: );
125: }
126: }
它的工作方式是这样的。用户触发一个函数,该函数创建一个将在 Redis 中排队的作业。然后当作业完成时,事件被触发。
Jobs 工作,除了发送事件,导致上述错误。
我们的尝试
我们尝试将 Curl 选项添加到 Pusher 广播连接:
'pusher' => [
'driver' => 'pusher',
'key' => env('PUSHER_APP_KEY'),
'secret' => env('PUSHER_APP_SECRET'),
'app_id' => env('PUSHER_APP_ID'),
'options' => [
'cluster' => env('PUSHER_APP_CLUSTER'),
'encrypted' => false,
'curl_options' => [
CURLOPT_SSL_VERIFYHOST => 0,
CURLOPT_SSL_VERIFYPEER => 0,
]
],
],
我们尝试将 'encrypted' 选项更改为 true/false。 None 其中有效。
我们尝试使用 php artisan cache:clear
清除缓存以及手动清除缓存 rm -r storage/framework/cache
。
我们尝试了composer dump-autoload
和composer update
。
我们对环境变量进行了三次检查,但仍然无法正常工作。
如果您需要更多信息,请告诉我!
好的,这是一个严重的 PEBKAC 案例。显然,我们使用的是全局 .env 变量,但 PUSHER APP ID 的名称错误。现在我们更改了它的名称应该是固定的。
因此,如果您遇到 404 错误,请确保您的应用变量是正确的。还要确保代码可以真正到达并读取它们。 (您可以使用 php artisan tinker
)。
问题
对于 Lumen 8 项目,我们正在尝试实施 Pusher。我们让它在 Docker 环境中本地工作,但是当我们转向 Kubernetes 时它就不再工作了。我们收到此错误:
[2021-05-27 17:56:36] production.ERROR: Pusher error: 404 NOT FOUND {"exception":"[object] (Illuminate\Broadcasting\BroadcastException(code: 0): Pusher error: 404 NOT FOUND at /var/www/html/vendor/illuminate/broadcasting/Broadcasters/PusherBroadcaster.php:122)
这意味着它抛出了这段代码:
114: if ($this->pusherServerIsVersionFiveOrGreater()) {
115: $parameters = $socket !== null ? ['socket_id' => $socket] : [];
116:
117: try {
118: $this->pusher->trigger(
119: $this->formatChannels($channels), $event, $payload, $parameters
120: );
121: } catch (ApiErrorException $e) {
122: throw new BroadcastException(
123: sprintf('Pusher error: %s.', $e->getMessage())
124: );
125: }
126: }
它的工作方式是这样的。用户触发一个函数,该函数创建一个将在 Redis 中排队的作业。然后当作业完成时,事件被触发。
Jobs 工作,除了发送事件,导致上述错误。
我们的尝试
我们尝试将 Curl 选项添加到 Pusher 广播连接:
'pusher' => [
'driver' => 'pusher',
'key' => env('PUSHER_APP_KEY'),
'secret' => env('PUSHER_APP_SECRET'),
'app_id' => env('PUSHER_APP_ID'),
'options' => [
'cluster' => env('PUSHER_APP_CLUSTER'),
'encrypted' => false,
'curl_options' => [
CURLOPT_SSL_VERIFYHOST => 0,
CURLOPT_SSL_VERIFYPEER => 0,
]
],
],
我们尝试将 'encrypted' 选项更改为 true/false。 None 其中有效。
我们尝试使用 php artisan cache:clear
清除缓存以及手动清除缓存 rm -r storage/framework/cache
。
我们尝试了composer dump-autoload
和composer update
。
我们对环境变量进行了三次检查,但仍然无法正常工作。
如果您需要更多信息,请告诉我!
好的,这是一个严重的 PEBKAC 案例。显然,我们使用的是全局 .env 变量,但 PUSHER APP ID 的名称错误。现在我们更改了它的名称应该是固定的。
因此,如果您遇到 404 错误,请确保您的应用变量是正确的。还要确保代码可以真正到达并读取它们。 (您可以使用 php artisan tinker
)。