gcloud app deploy :此部署文件过多

Posted

技术标签:

【中文标题】gcloud app deploy :此部署文件过多【英文标题】:gcloud app deploy : This deployment has too many files 【发布时间】:2017-07-16 01:13:24 【问题描述】:

当我尝试通过 gcloud 部署我的 GAE 应用程序时,出现以下错误。

Updating service [default]...failed.                                                                  
ERROR: (gcloud.app.deploy) Error Response: [400] This deployment has too many files. New versions are limited to 10000 files for this app.

Details: [
  [
    
      "@type": "type.googleapis.com/google.rpc.BadRequest",
      "fieldViolations": [
        
          "description": "This deployment has too many files. New versions are limited to 10000 files for this app.",
          "field": "version.deployment.files[...]"
        
      ]
    
  ]
]

有没有办法解决这个问题?

【问题讨论】:

【参考方案1】:

如果您尝试部署的服务中的文件配额确实超过 10000 个,那么您可能必须相应地减少数量。

其他尝试:

可能可以获得配额增加,请参阅Getting error on GAE: Max number of files and blobs is 10000 删除任何实际上不需要的文件,或者在部署期间跳过它们,请参阅skip_files,或者,对于更新的云 SDK 版本,请参阅 .gcloudignore file。 如果您有很多静态文件,请考虑将它们(其中一些)移动到 GCS,请参阅Approaches for overcoming 10000 file limit on Google App Engine? 将服务拆分为多个较小的服务 - 每个服务都有自己的 10000 个文件限制。

假设您实际上没有达到文件配额,那么该错误通常表明您的应用目录中有循环/循环引用符号链接。这也可以解释你在这篇文章的评论中提到的路径:https://***.com/a/42425048/4495081。您只需要修复有问题的符号链接。同样,简单/一致的目录结构有助于防止此类问题。

【讨论】:

我尝试在 app.yaml 中添加到我的跳过文件列表中,但是每当我进行部署时,该文件都会被删除。我没有提交更改,因为它是一个全局文件,但我希望它会被使用和保留。如何确保正在使用它?我如何知道部署正在下载哪些文件? Dee Dave 的回答如下。或者使用--verbosity 选项作为gcloud app deploy【参考方案2】:

gcloud app deploy 写入一个日志文件,并告诉您该日志在其输出的早期位置。检查该日志。它会告诉你正在上传什么。

我见过人们陷入困境的两种常见方式是

    使用 virtualenv,但不将 venv(或 .venv,如果您选择的名称)添加到 skip_files。 使用 git,但忘记将 .git 添加到 skip_files

【讨论】:

对于 python 运行时 3.7,通过将这些文件添加到 .gcloudingore 而不是 app.yaml 中的 skip_files 来解决此错误 添加 .gcloudignore 文件会导致错误:错误:(gcloud.beta.app.deploy) 不能在同一应用程序中同时定义 .gcloudignore 文件和 skip_files。我们建议您将您的 skip_files 忽略模式转换为您的 .gcloudignore 文件。有关 gcloudignore 的更多信息,请参阅 cloud.google.com/sdk/gcloud/reference/topic/gcloudignore。 gcloud 更新失败。纾困 app.yaml 中跳过部分的语法是什么?我想让它跳过我的 .tox 目录,但是当我添加以下行时:“-^(.tox/),部署命令报告语法错误,然后它会立即覆盖我的更改。 @ScottK cloud.google.com/appengine/docs/standard/python/config/… @ScottK 将此作为问题发布,以便其他人可以从答案中受益。如果里面有几个 cmets,没有人会看到这个。【参考方案3】:

对于 python 运行时 3.7,通过将这些文件添加到 .gcloudingore 而不是 app.yaml 中的 skip_files 来解决此错误

【讨论】:

【参考方案4】:

我可以通过将 google cloud sdk 文件夹添加到项目根文件夹中的 .gcloudignore 来减少我上传的文件。

【讨论】:

【参考方案5】:

几件事:

    有时static 文件夹会有点乱。尝试删除它并重新运行python manage.py collectstatic,这为我减少了大约 2000 个文件。 确保您的 .gcloudignore 文件忽略 assets 文件夹,因为它们刚刚被移动到 static。 忽略 virtualenv 文件夹,它们很大

【讨论】:

【参考方案6】:

也许您需要忽略文件 .gcloudignore 中的一些文件

/vendor/
/node_modules/
/.git/

这对我有用!

【讨论】:

我忘记将node_modules 添加到.gcloudignore。哎呀。【参考方案7】:

正如一些评论中提到的,virtualenv 文件夹可以有很多文件。

我刚刚将venv/ 作为新行添加到.gcloudignore 文件中。

【讨论】:

【参考方案8】:

我向 Google Cloud 支持提出了请求,这是他们对此问题的官方回复:

感谢您联系 Google Cloud 支持。我明白你是 由于您达到了 10,000 个文件的限制,因此无法部署您的应用 按照错误消息中的说明上传,如果我知道,请告诉我 误会了。

GAE 无法执行包含超过 10,000 个文件的部署。请 运行以下命令以查看正在部署的文件数: find . -type f | wc -l。如果您看到上面的数字 10,000;确保防止不必要的文件被部署 使用app.yaml 选项skip_files [1]。这个元素可以帮助你 指明哪些文件不应上传 [1]。

如果错误仍然存​​在,还有其他两种方法可以解决此问题:

    如果您使用的文件是静态内容,请使用 Cloud Storage 存储分区来存储您的文件。您可以将它们存储在 GCS 存储桶中 并通过 App Engine [2] 为他们提供服务。当您创建应用程序时,应用程序 引擎创建一个默认存储桶。要使用它,您必须列出 项目 [3] 中的存储桶,然后将 Cloud Storage 声明为 通过将其添加到应用程序的依赖文件 [4] 中。这会 允许您从存储桶 [5][6] 上传或下载数据。请 考虑到使用这种替代方法可能会影响您的每月开支。

    通过提交配额增加来增加上传文件的数量。为此,我将需要以下信息 将提交给产品团队,以便他们对其进行审核并制定 对此的决定:增加配额的商业理由 新的期望限制。

    https://cloud.google.com/appengine/docs/standard/python/config/appref#skip_files https://cloud.google.com/appengine/docs/standard/java/using-cloud-storage https://cloud.google.com/storage/docs/listing-buckets https://cloud.google.com/storage/docs/reference/libraries#installing_the_client_library https://cloud.google.com/storage/docs/uploading-objects https://cloud.google.com/storage/docs/downloading-objects

【讨论】:

以上是关于gcloud app deploy :此部署文件过多的主要内容,如果未能解决你的问题,请参考以下文章

gcloud - 错误:(gcloud.app.deploy)权限错误获取应用程序

在 Google App Engine 上部署 Django ==> 错误:(gcloud.app.deploy)NOT_FOUND:无法检索 P4SA(...)

gcloud app deploy 触发奇怪的错误:文件的 SHA1 和冲突

错误:(gcloud.app.deploy)INVALID_ARGUMENT:无法解析源

gcloud app deploy,标记以自动提示?

(gcloud.app.deploy) 错误响应:[7] 未配置访问。项目中未使用 Cloud Build