【问题标题】:Environment variables inheritance with microservices (Laravel & Lumen)微服务的环境变量继承(Laravel 和 Lumen)
【发布时间】:2016-01-30 14:08:15
【问题描述】:

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


【解决方案1】:

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

这样您就可以将不同文件夹中的 .env 文件放在一起。

我相信您所遇到的是应用程序正在同时引导,因此变量正在一起使用。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 2018-01-15
    • 1970-01-01
    • 2011-04-22
    • 1970-01-01
    相关资源
    最近更新 更多