5

我正在使用 Laravel 5.2,并且php artisan config:cache按照官方文档中的建议进行操作以提高速度。

您可能知道,此命令使 .env 文件变量无法直接访问(您可以使用 测试它php artisan tinker),因此,除了 config 文件夹中的文件之外,所有对代码的调用env()getenv()函数都必须替换config()为 。env('APP_ENV')执行此命令后,类似返回 NULL的调用。

在我的项目中,我使用google-auth-library-php连接到 Google Cloud 。不幸的是,在 CredentialsLoader.php 文件中有一个函数调用getenv(self::ENV_VAR)试图获取 Google 凭据文件的路径。当我运行命令php artisan config:cache时,无法从 .env 文件中读取路径,并且无法完成连接。

我可以看到 3 种方法可以继续:

  1. 忘记跑步php artisan config:cache
  2. 在这里询问是否有人知道如何将 Google 凭据文件的路径指定为包的任何函数的参数。
  3. (原谅我,上帝)更正 CredentialsLoader.php 文件(getenv()to config()),运行命令并在存储库中跟踪此文件,然后此更改将在每个团队成员拉取时传播给他们。

先感谢您!

4

2 回答 2

0

对于仍然遇到此错误的人,您可以keyFile在第一个参数中使用 index 指定文件:

$storage = new StorageClient([
   'keyFile' => json_decode(file_get_contents($path), true),
]);

keyFilePath或者您可以使用index直接指定 .json 文件进行配置

$storage = new StorageClient([
   'keyFilePath' => '/path/to/json/CompanyDataStorage-foobarbaz.json',
]);
于 2021-03-02T17:51:08.057 回答
0

这是一个非常古老的问题,但即使在较新版本的 Laravel 中,它也可能对遇到同样问题的人有用。基本上我没有适用于所有可能环境的解决方案,但它给出了这个想法。我的环境php7.4-fpm使用NGINX. 如果您使用相同的环境,您将有一个location针对您的 php 文件的指令。Nginx 可以设置 FastCGI 参数,fastcgi_param您可能已经使用过它SCRIPT_FILENAME等。然后您可以添加

location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    [...]
    fastcgi_param GOOGLE_APPLICATION_CREDENTIALS "/absolute/path/to/keyfile.json";
}

然后只需重新加载 Nginx(例如 Ubuntu 20.04,sudo systemctl reload nginx)。

对于 Apache,同样的想法可能适用于SetEnv https://httpd.apache.org/docs/2.4/mod/mod_env.html#setenv

于 2020-10-20T14:30:39.180 回答