我正在使用Laravel 5.2并按照官方文档中的建议php artisan config:cache
进行速度提升。
如您所知,此命令使.env文件变量直接无法访问(您可以使用php artisan tinker
进行测试),因此对env()
和getenv()
的所有调用都是如此函数必须由代码中的config()
替换,但config文件夹中的文件除外。执行此命令后,env('APP_ENV')
之类的调用将返回NULL。
在我的项目中,我使用google-auth-library-php连接到Google Cloud。不幸的是,在CredentialsLoader.php文件中,调用函数getenv(self::ENV_VAR)
,试图获取Google凭证文件的路径。当我运行命令php artisan config:cache
时,无法从.env文件中读取路径,并且无法完成连接。
我可以看到3种方法继续:
php artisan config:cache
。getenv()
到config()
),运行命令并在存储库中跟踪此文件,然后此更改将传播给每个团队成员他们拉。提前谢谢!
答案 0 :(得分:0)
这是一个非常老的问题,但即使对于较新版本的Laravel,它也可能对遇到相同问题的人有用。
基本上,我没有适用于所有可能环境的解决方案,但是它给出了想法。
我的环境与php7.4-fpm
一起运行NGINX
。
如果您使用相同的环境,那么您的PHP文件将使用location
指令。
Nginx可以使用fastcgi_param
设置FastCGI参数,并且您可能已经将其用于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
答案 1 :(得分:0)
对于那些仍然遇到此错误的人,您可以在第一个参数中使用 keyFile
索引指定文件:
$storage = new StorageClient([
'keyFile' => json_decode(file_get_contents($path), true),
]);
或者您可以使用 keyFilePath
索引直接指定 .json 文件进行配置
$storage = new StorageClient([
'keyFilePath' => '/path/to/json/CompanyDataStorage-foobarbaz.json',
]);