GAE的Delta变化

时间:2014-07-17 06:56:31

标签: google-app-engine

我想知道,当我按下"部署"在谷歌应用引擎启动器中,它如何将我的更改同步到实际实例....也许最好提出具体问题:)

1)是否仅上传更改文件的增量更改(而不是整个文件)?

2)它是否仅上传新文件和更改的文件(即不复制预先存在的)未更改的文件?

3)是否删除本地不存在的远程文件?

4)一旦应用程序完成部署,所有这些都会立即发生在最终用户身上吗? (即让我说我不小心上传了一个位于example.com/passwords.txt的不安全文件 - 如果#3为真,那么一旦我从本地目录中删除它并重新部署它应该会消失 - 但是我可以确定它真的消失了,而不是在某个地方缓存吗?)

2 个答案:

答案 0 :(得分:3)

如果您只使用启动器或appcfg util而不是通过git管理您的代码,AppEngine将只保留一个状态'您的应用程序的特定版本,并不会存储任何过去的状态。所以,

1)是的,它只上传增量,而不是完整文件。

2)是的,只有新的,修改过的或删除的文件。

3)是的,如果您在本地删除并部署,它会删除它们。正如Ibrahim Arief建议的那样,use appcfg是个好主意,所以你可以向自己证明。

4)这里有一些警告。使用新部署时,旧实例会发送一个kill信号,直到它实际执行为止,在新请求可能达到之前版本的过程中有一段时间(几秒到几分钟)。 Port Pleco的观点也非常重要。你必须小心caching on static files。如果你有一个带有Expires或Cache-Control标题的文件,并且它实际上已经提供,那么它可以缓存在各个地方,因此它的旧副本的存在完全超出你的控制范围。

快乐的编码!

答案 1 :(得分:0)

我不是谷歌员工,所以我没有保证准确的答案,但我可以根据我的经验谈谈你的问题:

1)从我所看到的,每次 上传所有文件

2)参见1,我很确定所有内容都已上传

3)我不完全确定它是否“删除”了这些文件,但如果当前版本中不存在这些文件,我肯定99%无法访问这些文件。如果要确保文件不可访问,则可以使用新版本号部署项目,并在管理面板中将应用程序版本切换到新版本。这将迫使谷歌使用该新版本中的所有最新文件。

4)从我所看到的,渲染/执行的更改,如html硬编码文本或控制器更改或类似,立即出现。与Web开发一样,静态文件可能会被缓存,这意味着您可能在用户的计算机上保存了旧版本的文件。您可以在文件名末尾使用查询字符串和版本强制对其进行更新。

例如,如果我有一个我知道我想要定期重新部署的javascript文件,我会像这样引用它:

<script type="text/javascript src="../javascript/file.js?version=1.2" />

然后,当我需要强制将javascript部署到我的用户时,手动增加版本号。