Laravel Hyn \ Multi-Tenant Database [арендатор] не настроен - PullRequest
0 голосов
/ 03 октября 2018

Я работаю с мультитенантным приложением laravel и столкнулся с проблемой с пакетом hyn \ multi-tenant.Документация для hyn \ multi-tenant гласит, что соединение с базой данных клиента будет обрабатываться пакетом и что до тех пор, пока соединение с системой доступно и у пользователя есть права на добавление и изменение баз данных, пакет будет обрабатывать все соединения с базой данных клиента..

При попытке создать арендатора в моем приложении я получаю сообщение об ошибке: База данных [арендатор] не настроена.

Я видел много ответов на этот вопрос в SO, однако все они относятся к модели Customer или конфигурациям localhost.Хин удалил модель Customer, и проблема, с которой я столкнулся, также возникает на моем сервере DigitalOcean, опубликованном через Laravel Forge.

Буду признателен всем, кто сможет оказать некоторую помощь.

Мой .env (локальный)

APP_NAME="Multi-Tenant"
APP_ENV=local
APP_KEY=base64:j1aLzU7m5LWK1keo/FjgbtpwTpVZ1NBj29zuXIByHek=
APP_DEBUG=true
APP_URL_BASE=localhost:8888/lms/public
APP_URL=http://${APP_URL_BASE}

LOG_CHANNEL=stack

DB_CONNECTION=system
DB_HOST=127.0.0.1
DB_PORT=8889
DB_DATABASE=lmssystem
DB_USERNAME=lmssystem
DB_PASSWORD=lmssystem

BROADCAST_DRIVER=log
CACHE_DRIVER=file
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null

PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
PUSHER_APP_CLUSTER=mt1

MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"

LIMIT_UUID_LENGTH32=true

Мой database.php

return [
'default' => env('DB_CONNECTION', 'system'),
'connections' => [

        'system' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '8889'),
            'database' => env('DB_DATABASE', 'lmssystem'),
            'username' => env('DB_USERNAME', 'lmssystem'),
            'password' => env('DB_PASSWORD', 'lmssystem'),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'strict' => true,
            'engine' => 'InnoDB',
        ],
    ],
 'migrations' => 'migrations',
'redis' => [

        'client' => 'predis',

        'default' => [
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', 6379),
            'database' => env('REDIS_DB', 0),
        ],

        'cache' => [
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', 6379),
            'database' => env('REDIS_CACHE_DB', 1),
        ],

    ],

];

1 Ответ

0 голосов
/ 04 октября 2018

Эта проблема оказалась логической ошибкой в ​​моем приложении, а не проблемой конфигурации базы данных.Я был вынужден отклониться от статьи Ашока о Medium [https://medium.com/@ashokgelal/a-full-featured-multi-tenant-app-with-laravel-part-1-4049a3cc229d][1], поскольку пакет Hyn \ Multi-Tenant больше не поддерживает модель клиента.

После разработки собственной модели клиента и расширения существующего веб-сайтаи модели Hostname для взаимодействия с клиентской моделью, мне пришлось переписать команду tenant: create.При этом я создавал веб-сайты и имена хостов непосредственно из их расширенных моделей, а не через репозитории в соответствии с документацией Hyn (скопировано ниже)

Арендация в значительной степени определяется событиями.Для правильной работы слушателей событий вы должны использовать репозитории для создания новых веб-сайтов и имен хостов.использовать Hyn \ Tenancy \ Models \ Website;use Hyn \ Tenancy \ Contracts \ Repositories \ WebsiteRepository;

$website = new Website;
app(WebsiteRepository::class)->create($website);
dd($website->uuid); 

$hostname = new Hostname;
$hostname->fqdn = 'luceos.demo.app';
app(HostnameRepository::class)->attach($hostname, $website);

Создание с помощью репозиториев решило:

Database [tenant] not configured

Ошибка.

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