gcloud app deploy:此部署包含太多文件

时间:2017-02-25 03:23:21

标签: python google-app-engine flask

当我尝试通过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[...]"
        }
      ]
    }
  ]
]

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

8 个答案:

答案 0 :(得分:6)

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

其他尝试:

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

答案 1 :(得分:5)

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

我看到人们遇到麻烦的两种常见方式是

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

答案 2 :(得分:1)

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

/vendor/
/node_modules/
/.git/

这对我有用!

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

几件事:

  1. 有时static文件夹可能会有些混乱。尝试删除它并重新运行python manage.py collectstatic,这对我来说减少了大约2000个文件。
  2. 确保您的.gcloudignore文件忽略了assets文件夹,因为它们已被移至static
  3. 忽略virtualenv文件夹,它们很大

答案 6 :(得分:0)

如某些评论中所述, virtualenv 文件夹可以包含很多文件。

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

答案 7 :(得分:0)

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

<块引用>

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

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

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

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

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

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