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 和冲突