【问题标题】:gcloud app deploy : This deployment has too many filesgcloud app deploy :此部署文件过多
【发布时间】: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[...]"
        }
      ]
    }
  ]
]

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

【问题讨论】:

    标签: python google-app-engine flask


    【解决方案1】:

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

    其他尝试:

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

    【讨论】:

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

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

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

    1. 使用 virtualenv,但不将 venv(或 .venv,如果您选择的名称)添加到 skip_files
    2. 使用 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 将此作为问题发布,以便其他人可以从答案中受益。如果里面有几个 cmets,没有人会看到这个。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        几件事:

        1. 有时static 文件夹会有点乱。尝试删除它并重新运行python manage.py collectstatic,这为我减少了大约 2000 个文件。
        2. 确保您的 .gcloudignore 文件忽略 assets 文件夹,因为它们刚刚被移动到 static
        3. 忽略 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]。

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

            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

            【讨论】:

              猜你喜欢
              • 2019-05-18
              • 2020-04-27
              • 1970-01-01
              • 2017-04-10
              • 1970-01-01
              • 1970-01-01
              • 2017-04-16
              • 1970-01-01
              • 2019-04-10
              相关资源
              最近更新 更多