带有教程代码的 Google GCP 错误

Posted

技术标签:

【中文标题】带有教程代码的 Google GCP 错误【英文标题】:Google GCP error with tutorial code 【发布时间】:2018-08-02 05:58:37 【问题描述】:

解决问题。我的案例:

在阅读问题之前,由于我的开发环境,我的问题已经解决。使用 CodeKit(MacOS 上的应用程序),在从源文件夹构建我的代码时,composer.json 和其他文件等项目没有传输,导致下面描述的问题。如果确实发生这种情况,您可以搜索这两个文件夹以查找差异,将缺少的文档从 src 粘贴到构建文件夹。

:: 问题::

我今天开始使用 GCP,并按照此处定义的说明进行操作:

composer require google/cloud-storage

然后:

putenv("GOOGLE_APPLICATION_CREDENTIALS=/path/to/creds.json");

require __DIR__.'/vendor/autoload.php';

use Google\Cloud\Storage\StorageClient;
$myid = "my-project-id";

$storage = new StorageClient([
  'projectId'=>$myid
]);

var_dump($storage->buckets());

运行时出现以下错误:

致命错误:在第 94 行的 /place/to/vendor/google/cloud-core/RequestWrapperTrait.php 中找不到类“Google\Auth\Cache\MemoryCacheItemPool”

我不知道如何解决这个问题,因为我刚刚开始使用 GCP。不知道这是平台问题还是我的代码问题。

Google Auth 的文件结构如下所示:

供应商 谷歌 认证 源代码 测试 云核心 云存储

/Cache/MemoryCacheItemPool 存在于 tests 和 src 文件夹中,但以上引用它减去 src 或 tests 文件夹。

我也跑过:

composer update

并卸载并重新安装包无效

Google Cloud Project Link

【问题讨论】:

【参考方案1】:

您在哪里找到您使用和粘贴的代码?因为official documentation中存在的那个是不同的。

这部分代码是您链接的教程中的代码,尝试使用客户端库并发布错误日志,如果有的话!

require __DIR__ . '/vendor/autoload.php';
use Google\Cloud\Storage\StorageClient;
$projectId = 'YOUR_PROJECT_ID';
$storage = new StorageClient(['projectId' => $projectId]);
$bucketName = 'my-new-bucket';
$bucket = $storage->createBucket($bucketName);
echo 'Bucket ' . $bucket->name() . ' created.';
请记住,存储桶名称应该是唯一的,因此我建议您使用长而复杂的名称对其进行测试,以避免命中已使用的名称,并始终测试操作的结果。

更新 我还测试了您的代码,它也可以正常工作,因此我认为这是环境设置中的错误。

您在运行composer require google/cloud-storage 时是否遇到任何错误?因为缺少Google\Auth\Cache\MemoryCacheItemPool 的类是作曲家安装的Psr 的一部分

[...]
Installing psr/cache (1.0.1)
Loading from cache
[...]

更新2 Matthew M 在其配置中发现错误并发布:

终于解决了这个问题。我在工作中使用 CodeKit 环境,看起来它正在改变一些东西 编译。运行一个未编译的版本,它工作正常。

【讨论】:

感谢您的回复 GalloCedrone,您可能会在我的代码中注意到,它与您的代码相似,只是添加了设置所需的环境变量。由于我已经手动创建了一个存储桶,我使用$storage->buckets(); 并将其作为证明方法转储,我将更新我的问题代码以类似于更新后的代码。 好的!在我了解您正在尝试遵循文档之前提供尽可能多的代码。或者,当您写道:“按照此处定义的说明进行操作后”时,您可能错过了一个链接 感谢您的理解。上面问题中反映的代码现在反映了我编写的所有内容,但是错误似乎来自调用 StorageClient 我不明白为什么当你必须传递 project_id 时你传递 myid,即定义为 $myid = "my-bucket-id"。你在这里复制代码只是一个错字吗? 嗨,GalloCedrone。终于解决了这个问题。我在我的工作环境中使用 CodeKit,它看起来在编译时正在改变一些东西。运行一个未编译的版本,它工作正常。感谢您的帮助!

以上是关于带有教程代码的 Google GCP 错误的主要内容,如果未能解决你的问题,请参考以下文章

带有 Terraform 的 Google Cloud 凭据

Python 2.7 和 GCP Google BigQuery:捕获文件加载错误?

使用 vs 代码在 Spring Boot 中设置 GCP 环境变量

Google产品

协议缓冲区架构无效。导入“google/protobuf/any.proto”尚未加载:GCP/Pub-Sub

谷歌钱包应用内付款:未捕获的 ReferenceError:未定义 goog。 google.payments 与 goog.payments