Несколько загрузочных файлов Laravel 5 / cache / config.php

Допустим, у меня есть одна кодовая база для 500+ клиентов, основанная на веб-серверах с балансировкой нагрузки. Каждый клиент имеет свою собственную базу данных и, следовательно, свой собственный набор учетных данных.

Простым способом здесь было бы иметь разные .env-файлы с каждым из учетных данных клиентов и настроек среды (кстати, это прекрасно работает), но из соображений оптимизации я хотел бы запустить метод «artisan cache: config». Это скомпилирует все файлы конфигурации в один файл «config.php» в / bootstrap / cache «.

Теперь, это не очень функционально с большим количеством клиентов. Я могу сказать Laravel, ГДЕ искать кэшированный файл конфигурации? Без изменения основного кода?

Как определение переменной среды из vhost «CONFIG_PATH» и (псевдокод)

if( null !== getenv("CONFIG_PATH") && getenv("CONFIG_PATH") != "" ) {
$app->bootstrapConfigPath( getenv("CONFIG_PATH") );
}

Или это единственная возможность иметь много каталогов с каждой папкой «Bootstrap / cache» и символическими ссылками на общую кодовую базу (что, на мой взгляд, является довольно сложным путем для перехода)

Заранее спасибо.

0

Решение

Это возможно, но вам нужно выполнить пару шагов. Во-первых, расширяя Illuminate\Foundation\Application с вашим собственным классом приложения и переопределением bootstrapPath() метод. Тогда вам также нужно вернуться к оригиналу bootstrap/app.php из вашей пользовательской папки начальной загрузки.

Шаг 1

/app/Applications/MyApp.php — новый класс пользовательских приложений

<?php

namespace App\Applications;

use Illuminate\Foundation\Application as Laravel;

class MyApp extends Laravel
{

public function bootstrapPath($path = '')
{

$bootstrap_env = getenv('APP_BOOTSTRAP');
if(!$bootstrap_env || !file_exists($bootstrap_env) || !file_exists($bootstrap_env.'/app.php')){
dd("Install incomplete, please set bootstrap folder via APP_BOOTSTRAP, make sure the folder exists and the app.php is sym linked");
}
return $bootstrap_env;
}

}

Шаг 2

/app/bootstrap/app.php — обновить, чтобы создать новый пользовательский класс

- $app = new Illuminate\Foundation\Application(
-  realpath(__DIR__.'/../')
- );

+ $app = new App\Applications\MyApp(
+  realpath(__DIR__.'/../')
+ );

в заключение

Создайте пользовательские папки (убедитесь, что они доступны для записи) и символическую ссылку текущего app.php на пользовательское расположение начальной загрузки.

mkdir -p /mycustomlocation/bootstrap/cache/

ln -s /laravel/install/bootstrap/app.php /mycustomlocation/bootstrap/app.php

* Мы соединяем это с установкой пользовательского местоположения .env, используяuseEnvironmentPath() метод на экземпляре $app также.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]