环境变量继承微服务(Laravel& Lumen)

时间:2015-10-30 07:52:01

标签: php laravel inheritance environment-variables microservices

最近,我在 Laravel 应用旁边部署 Lumen 微服务时遇到了问题。在同一台机器上,我有一个Laravel应用程序和一个Lumen应用程序,它们都有不同的.env文件和默认环境变量(APP_ENVDB_HOSTDB_DATABASE等。 / p>

我的 Laravel 应用需要向 Lumen 应用发出请求以获取一些数据。那是问题发生的时候。当 Lumen 应用程序收到请求时,它还会继承 Laravel 的环境变量,从而无法完成任务(连接到数据库或其他具有在.env文件中设置的环境变量,因为所有变量都是从父请求继承的。)

以前有人遇到过这个问题吗?我是否正确使用微服务架构?

使用代码

更新

Laravel app - 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_环境变量。< / p>

1 个答案:

答案 0 :(得分:0)

我相信你的问题应该通过将项目置于他们自己的vhost中来解决。当项目存在于他们自己的vhost中时,您将更容易分离文件。

通过这种方式,您可以将.env文件放在不同的文件夹中。

我相信您遇到的是应用程序同时启动,因此变量一起使用。

如果您使用Homestead作为您的VM,请尝试创建两个域并将项目分开,当您的laravel应用程序需要调用lumen时,按主机名调用它,它应该可以工作。 (注意只有一个vhost可以称为localhost)