Недавно я столкнулся с проблемой при развертывании люмен микросервис рядом с Laravel приложение. На одной машине у меня есть приложение Laravel и приложение Lumen с разными .env
файл и переменные среды по умолчанию (APP_ENV
, DB_HOST
, DB_DATABASE
, так далее).
мой Laravel Приложение должно сделать запрос на люмен приложение, чтобы получить некоторые данные. Вот когда возникает проблема. Когда люмен приложение получает запрос, оно также наследует Laravelпеременных среды, что делает невозможным выполнение своей работы (подключение к базе данных или другим службам, для которых переменные среды установлены в .env
файл, потому что все переменные наследуются от родительского запроса).
Кто-нибудь сталкивался с этой проблемой раньше? Правильно ли я использую архитектуру микросервисов?
Обновить с кодом.
Приложение Laravel — UsersController.php
/**
* Makes a request to the Core API and fills properties with the response data
*
* @param $method
* @param $uri
* @param array|null $data
*/
public function request($method, $uri, array $data = null)
{
$this->api = new Client(['base_uri' => 'http://127.0.0.1/']);
if (property_exists($this, 'uriPrefix')) $uri = $this->uriPrefix . $uri;
$requestOptions = [
'http_errors' => false,
'headers' => ['Accept' => 'application/json']
];
if (session('api_cookie')) $requestOptions['headers']['Cookie'] = implode(';', session('api_cookie'));
if ($data) {
if ($method == 'GET') $requestOptions['query'] = $data;
else if (($method == 'POST') || ($method == 'PUT')) $requestOptions['form_params'] = $data;
}
$response = $this->api->request($method, $uri, $requestOptions);
session(['api_cookie' => $response->getHeader('Set-Cookie')]);
$this->responseCode = $response->getStatusCode();
$this->responseReasonPhrase = $response->getReasonPhrase();
$this->responseData = $response->getBody();
}
Когда я делаю этот запрос люмен приложение не может подключиться к базе данных, потому что оно наследует DB_
переменные среды от родителя Laravel приложение.
Я считаю, что ваша проблема должна решиться сама собой, поместив проект в собственный vhost. Когда проекты живут в своем собственном vhost, вам будет проще разделять файлы.
Таким образом, вы можете хранить файлы .env в разных папках.
Я полагаю, что вы испытываете то, что приложение загружается одновременно, поэтому переменные используются вместе.
Если вы используете Homestead в качестве виртуальной машины, попробуйте создать два домена и разделить проект, а когда вашему приложению laravel необходимо вызвать lumen, вызовите его по имени хоста, и оно должно работать. (Обратите внимание, что только один vhost может называться localhost)
Других решений пока нет …