Допустим, у меня есть одна кодовая база для 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» и символическими ссылками на общую кодовую базу (что, на мой взгляд, является довольно сложным путем для перехода)
Заранее спасибо.
Это возможно, но вам нужно выполнить пару шагов. Во-первых, расширяя Illuminate\Foundation\Application
с вашим собственным классом приложения и переопределением bootstrapPath()
метод. Тогда вам также нужно вернуться к оригиналу bootstrap/app.php
из вашей пользовательской папки начальной загрузки.
/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;
}
}
/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
также.
Других решений пока нет …