Laravel Базовый путь панели инструментов Websockets с неработающей подпапкой - PullRequest
0 голосов
/ 01 февраля 2020

Я довольно новичок в широковещании / веб-сокетах и ​​пытаюсь настроить Laravel Веб-сокеты и толкатель.

Используя мой subdomain.example.com, я могу заставить subdomain.example.com/laravel-websockets работать, и события отображаются на экране когда я запускаю их с помощью php ремесленник-тинкер и когда создаю событие на странице. Однако мне нужна эта работа внутри пути subdomain.example.com/api/laravel-websockets

Когда я пытаюсь URL-адрес с /api, хотя он загружает панель мониторинга, как и ожидалось, он не может подключиться и, глядя в консоль, я вижу, что он игнорирует /api в своих запросах, например, для Auth: http://subdomain.example.com/laravel-websockets/auth вместо http://subdomain.example.com/api/laravel-websockets/auth. Это относится ко всему в консоли. Даже когда я редактирую запрос в консоли, чтобы добавить /api, он работает.

Где-нибудь я могу изменить базовый путь?

Вот мой файл .env:

APP_URL=http://subdomain.example.com/api/

LOG_CHANNEL=daily

BROADCAST_DRIVER=pusher
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

APP_NAME==test
PUSHER_APP_ID=1234
PUSHER_APP_KEY=1234
PUSHER_APP_SECRET=secret
PUSHER_APP_CLUSTER=mt1

Вот мой config/websockets.php конфиг толкателя

'dashboard' => [
    'port' => env('LARAVEL_WEBSOCKETS_PORT', 6001),
],

'apps' => [
    [
        'id' => env('PUSHER_APP_ID'),
        'name' => env('APP_NAME'),
        'key' => env('PUSHER_APP_KEY'),
        'secret' => env('PUSHER_APP_SECRET'),
        'enable_client_messages' => true,
        'enable_statistics' => true,
    ],
],

и мой config/broadcasting.php

    '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' => true,
        'host' => '127.0.0.1',
        'port' => 6001,
        'scheme' => 'http'
    ],
],

Редактировать: Добавление моей конфигурации в показать, как работает / api, где /var/www/example - папка root моего Laravel приложения

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName subdomain.example.com
    ServerAlias subdomain.example.com
    Alias /api /var/www/example/public
    <Directory /var/www/example/>
            Options Indexes FollowSymLinks
            AllowOverride All
            Require all granted
            RewriteEngine On
    </Directory>

    DocumentRoot /var/www/example/client-side
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

в public / .htaccess У меня есть следующее:

 RewriteBase /api/

Редактировать

Я вижу, что я могу заставить это работать, если я добавлю api/ к путям запроса javascript прямо в dashboard.blade.php, что заставляет меня думать решение есть версия этого файла работает. Однако я не думаю, что это решает общую проблему. Я бы предпочел сделать это правильно. (см. authEndpoint ниже)

     connect() {
            this.pusher = new Pusher(this.app.key, {
                wsHost: this.app.host === null ? window.location.hostname : this.app.host,
                wsPort: this.port === null ? 6001 : this.port,
                wssPort: this.port === null ? 6001 : this.port,
                wsPath: this.app.path === null ? '' : this.app.path,
                disableStats: true,
                authEndpoint: '/api/{{ request()->path() }}/auth',
                auth: {
                    headers: {
                        'X-CSRF-Token': "{{ csrf_token() }}",
                        'X-App-ID': this.app.id
                    }
                },
                enabledTransports: ['ws', 'flash']
            });

Ответы [ 2 ]

1 голос
/ 18 апреля 2020

Я использую Laravel 6.x и в dashboard.blade.php я заменил request()->path() на Request::getRequestUri() в строках 121 и 165, что обеспечивает динамическое c решение, но мне все равно пришлось заказывать продавца dashboard.blade.php файл ... так открыли проблему на github.

1 голос
/ 01 февраля 2020

Я не буду помечать это как ответ, пока у кого-то не будет лучшего предложения, но мне пришлось переопределить dashboard.blade.php и сделать свой собственный в resources/views/beyondcode/laravel-websockets/dashboard.blade.php и добавить /api, где все вызовы сделаны.

Это на самом деле исправило еще одну проблему, связанную с тем, что я не получил график в реальном времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...