【问题标题】:Appengine uploads are limited to 10000 filesAppengine 上传限制为 10000 个文件
【发布时间】:2013-11-14 19:35:33
【问题描述】:

由于上传的硬性限制(即 10,000 次),尝试将我的应用程序部署到 appengine 失败。

我的应用程序正在使用其他 2 种语言的外部库和常量。请参考以下快照:

GWT.Async 块已放置在项目中的必要位置。

使用以下编译时选项: -localWorkers 3 -XfragmentCount 10

但问题是当我将项目上传到 appengine 时,出现以下异常:

**

java.io.IOException: 应用程序限制为 10000 个文件,你有 34731

**

我知道我可以通过降低跨浏览器兼容性或减少语言环境来减少文件数量。但这不是部署时的实用方法

所以请给我一些替代方案。

我想提到的另一件事是该项目在其大部分屏幕中广泛使用 VerticalPanel/Horizo​​ntalPanel/FlexTable/DialogBox。我不确定这是否与此问题有关。

【问题讨论】:

  • 正如约翰在 Google+ 中问的,你有多少分割点?有多少排列?如果你有 100 个分割点和 100 个排列,那将产生超过 10,000 个 js/html 文件(加上各种图像,但这些图像不太可能被复制这么多次)。
  • 我的最后一个问题部分由模块文件回答 - 5 个浏览器和三个(或四个包括默认值)语言环境,但这不包括您自己的其他模块,我们看不到屏幕截图为。
  • 如果我理解正确的话,我有 5 种浏览器配置和三种不同的语言(包括英语)。我尝试保留一个浏览器并且没有自定义区域设置,它需要 20 次排列。所以总的来说,我需要 100 个没有自定义语言环境的排列。但是如果有 2 个额外的区域语言环境,这将上升到 300。这意味着将文件数保持在 10K 以下,我不应该有超过 30-32 个拆分点。在这里,我将每个 GWT.Async 块都算作一个。这个假设正确吗??
  • 我知道你不能列出所有的文件,但你能快速分析一下吗?有多少个 .cache.html 文件(排列),有多少个 .cache.js 文件,最大的 N 是多少(即多少个分割点)。 20 perms + (20 perms * 30 split points = 600) 仍然不到你看到的数字的 10% - 我猜关于太多类文件的答案可能是真正的问题......
  • 谢谢科林。但是在我的案例中生成的类是STATIC 文件夹中)。我修改了 appengine xml,通过添加“”来忽略资源文件中的缓存文件。看来我现在已经解决了这个问题。

标签: java google-app-engine gwt


【解决方案1】:

我担心这也会发生在我身上,我在项目中间遇到了这个问题,所以我将浏览器限制为 chrome 和 ff。但是当我必须真正部署时,这可能是一个问题。

每个版本的应用程序最多可上传 10,000 个文件。每个文件的最大大小限制为 32 兆字节。此外,如果所有版本的所有文件的总大小超过最初的免费 1 GB,则每月每 GB 将收取 0.13 美元的费用。 https://developers.google.com/appengine/docs/quotas#Deployments

如果您的数据在语言之间不相关,则解决方案可能是将每种语言部署为一个应用程序

【讨论】:

  • 嗯,部署多个应用程序可能不合适。在大小方面,我远低于 1GB 的阈值。但是文件数量是个问题,更重要的是在 deferredJs 文件夹中。想知道是否有一些技巧可以在不失去跨浏览器兼容性或语言环境的情况下控制这种情况。
  • 我开始查看已部署的文件夹以查看文件在哪里。我似乎没有 10000 个文件 :-( (你认为 jars 是否已解压缩?)当你进入你的 war 文件夹时(在你编译你的 GWT 应用程序之后)有 34K 文件吗?
  • 实际上没有,那里大约有 16.5K 文件。但是当您尝试使用 appcfg 上传您的应用程序时,会在上传之前创建一个临时文件夹。其中的文件数约为 34K。应该考虑文件数。
【解决方案2】:

听起来您可能还会将所有 gwt 类与您的应用程序一起部署。

当我是一个重度 appengine 用户时,我肯定会 jars 我所有上传的类(并且不包括任何非共享的 gwt 代码)。您可能需要 $find . -n "*.class" | wc -l 来计算您发送的课程数量。

预先整理好你的类会产生 15000 个类文件 = 1 个 jar 文件。

制作巨大的罐子很糟糕,因为每次更改都需要重新部署整个罐子。最好有很多小罐子。 ;)

【讨论】:

  • 还可以使用软排列进行检查。 code.google.com/p/google-web-toolkit/wiki/SoftPermutations 这些允许您使用延迟绑定,但可以折叠排列并将它们编译在一起。除非您的排列具有截然不同的代码量,否则每个排列的额外文件大小与较少的排列可能会对您有所帮助。
  • 是的,这听起来很连贯:服务器端(和共享)的类只应在部署时包含。这可以通过 gradle 脚本(或 ant、maven)自动化
【解决方案3】:

我所做的是将所有 GWT 生成的文件放入一个 ZIP 并使用 servlet 提供它们。

为了稍微优化一下,我把每个文件解压后都放到了内存缓存中。

【讨论】:

    猜你喜欢
    • 2017-12-09
    • 1970-01-01
    • 1970-01-01
    • 2016-09-07
    • 1970-01-01
    • 2021-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多