运行php artisan config:cache后,并非.env中的所有变量都被缓存

时间:2019-06-13 10:49:03

标签: laravel-5

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

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

我在供应商文件夹中的google api auth文件中找到了以下功能。看来Google服务默认使用.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);
}

3 个答案:

答案 0 :(得分: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'); 

答案 1 :(得分:0)

如果您的env值包含空格,则需要将其用引号引起来。即APP_NAME =“ This is myapp”。请先确认。

根据您的情况,尝试使用GOOGLE_APPLICATION_CREDENTIALS =“ ../ storage / app / service-account.json”

答案 2 :(得分:0)

首次运行

 php artisan cache:clear

然后

 php artisan config:cache