【发布时间】:2016-01-30 14:08:15
【问题描述】:
最近我在 Laravel 应用旁边部署 Lumen 微服务时遇到了问题。在同一台机器上,我有一个 Laravel 应用程序和一个 Lumen 应用程序,它们都有不同的 .env 文件和默认环境变量(APP_ENV、DB_HOST、DB_DATABASE 等)。
我的 Laravel 应用需要向 Lumen 应用发出请求以获取一些数据。这就是问题发生的时候。当 Lumen 应用程序收到请求时,它也会继承 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();
}
当我提出这个请求时,Lumen 应用无法连接到数据库,因为它从父 Laravel 应用继承了 DB_ 环境变量。
【问题讨论】:
-
如何将请求发送到 lumen? .env-variables 听起来不太可能被继承。
-
我用 http 请求发送它。我从 Laravel 应用程序向 Lumen 应用程序发出请求
lumen.localhost/api/users -
您能添加您的代码、您的环境文件等吗?
-
它们很相似。两者的唯一区别是它们将具有不同的
APP_KEY和不同的DB_凭据。APP_ENV=localAPP_DEBUG=trueAPP_KEY=someRandomStringDB_HOST=localhostDB_DATABASE=homesteadDB_USERNAME=homesteadDB_PASSWORD=secret -
请将您的代码添加到问题中(您如何分派请求、API 等)。你会得到什么样的错误。
标签: php laravel inheritance environment-variables microservices