【问题标题】:Not all variables in .env are cached after run php artisan config:cache运行 php artisan config:cache 后,并非 .env 中的所有变量都被缓存
【发布时间】:2019-10-27 22:46:25
【问题描述】:

GOOGLE_APPLICATION_CREDENTIALS=../storage/app/service-account.json

我在 .env 文件中有一个 google api 凭据密钥。但是,在我运行 php artisan config:cache 后,无法加载凭据。在缓存配置之前它工作正常。

我在 vendor 文件夹中的 google api auth 文件中找到了以下函数。谷歌服务似乎默认使用 .env 。所以在 config:cache 之后,fromEnv 函数会中断。 使用另一种身份验证方法 setAuthConfig('/path/to/client_credentials.json') 解决问题。

/**
 * Load a JSON key from the path specified in the environment.
 *
 * Load a JSON key from the path specified in the environment
 * variable GOOGLE_APPLICATION_CREDENTIALS. Return null if
 * GOOGLE_APPLICATION_CREDENTIALS is not specified.
 *
 * @return array JSON key | null
 */
public static function fromEnv()
{
    $path = getenv(self::ENV_VAR);
    if (empty($path)) {
        return;
    }
    if (!file_exists($path)) {
        $cause = 'file ' . $path . ' does not exist';
        throw new \DomainException(self::unableToReadEnv($cause));
    }
    $jsonKey = file_get_contents($path);
    return json_decode($jsonKey, true);
}

【问题讨论】:

  • 你是如何使用 config.php 中的 env 变量的,你能证明一下吗?
  • 我不明白。它是一个带有数据库和电子邮件配置的缓存文件,例如 DB_DATABASE 和 MAIL_USERNAME。
  • 您是在配置文件中添加了GOOGLE_APPLICATION_CREDENTIALS 变量还是只在.env 文件中添加了它?

标签: laravel-5


【解决方案1】:

原因是你加载文件的方式。

您的视图/控制器中可能有这个:env('GOOGLE_APPLICATION_CREDENTIALS ');。但是当您执行php artisan config:cache 时,这将中断。你应该只在你的视图/控制器中使用 config() 助手。因此,为了使其正常工作,您应该制作一个额外的 google-config 文件或将以下内容添加到您的 config/services.php:

 'google' => [
    'application-credentials' => env('GOOGLE_APPLICATION_CREDENTIALS'),
 ]

现在您可以在视图/控制器中获取它:

config('services.google.application-credentials'); 

【讨论】:

  • 谢谢。 Google API 服务默认使用 getenv。使用另一种身份验证方法解决问题。
  • @Hans 你能否提供一个清楚的例子来说明你是如何实际解决这个问题的?我没有在我的代码中的任何地方使用env('GOOGLE_APPLICATION_CREDENTIALS ');,并且 Google\Auth 包默认使用(就像你已经提到的)getenv()
  • @DanielR。 $client = new Google_Client(); $client->setAuthConfig(path to service-account.json);
【解决方案2】:

如果您的 env 值包含空格,则需要将其括在引号中。即 APP_NAME="这是我的应用程序"。请先确认。

在您的情况下,请尝试使用 GOOGLE_APPLICATION_CREDENTIALS="../storage/app/service-account.json"

【讨论】:

    【解决方案3】:

    第一次运行

     php artisan cache:clear
    

    然后

     php artisan config:cache
    

    【讨论】:

    • 已经试过了。我认为是“GOOGLE_APPLICATION_CREDENTIALS=../storage/app/service-account.json”的问题
    猜你喜欢
    • 2019-04-13
    • 2018-02-16
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 2012-06-11
    • 2012-11-11
    • 2011-01-11
    • 2023-03-22
    相关资源
    最近更新 更多