最喜欢的Google App引擎提示和功能

时间:2010-08-18 23:42:24

标签: eclipse google-app-engine cron pydev ubuntu-10.04

当从任何新的主要库或系统开始时,我会去StackOverflow获取“我应该知道什么?”的问题。答案可能是主观的,但建议通常可以节省我很多小时的麻烦。到目前为止,我已经在谷歌应用引擎上熬了几个小时,因为这里的经验丰富的开发人员已经知道这些问题。

我最终发现了这些常见问题:

  • appcfg.py上传不会显示 直到您选择谷歌仪表板 它们来自Versions标签。
  • 使用cron作业来保持应用程序不被保留是 如果你想要一致的响应时间是必要的这成了“公地问题的悲剧”(谢谢尼克)。
  • Eclipse中的PyDev适用于Google App Engine。
  • 为Ubuntu 10.04获取本地版本的Python 2.5很难。或者你可以“sudo add-apt-repository ppa:fkrull / deadsnakes”来获得它。
  • 使用VirtualEnvWrapper将您的Python2.5 for GAE与用于其他所有内容的其他Python版本隔离开来。
  • appspot上的应用程序只在不方便时切换到新更新的版本,无论控制面板说什么。你应该在标题或页脚中保留一个版本号,以避免疯狂的追逐。

那么,我还应该知道什么呢?

2 个答案:

答案 0 :(得分:3)

要报道的内容非常多。如果你有一个你感兴趣的特定领域,也许我们可以提供更具体的东西。一般来说,我将利用这个机会来插入my blog,它有很多App Engine材料。

但是我会对你的一个观点提出异议:

  

如果您需要一致的响应时间,则必须使用cron作业来保持应用程序不被保留。

首先,这是“公地悲剧”的悲剧。如果应用程序处于闲置状态,可以为正在投放流量的应用程序让位;一群运行'keepalive'cronjobs的人强迫所有应用程序更快卸载,让每个人都变得更糟。

其次,即使使用keepalive cron作业,您总是会偶尔获得加载请求。您的应用程序的其他实例会在需要时进行安排,因此每当您获得大量流量时,就会发生这种情况,并且有人将不可避免地收到加载请求。

最后,加载请求不一定是个大问题。特别是最近添加的Python预编译支持,加载请求不需要花费大量时间,而您在优化上花费的工作将使所有您的用户受益。

答案 1 :(得分:1)

如果您正在使用“for / in”查询,例如:“查找此用户列表中的某人今天创建的事件”,您会发现此类查询无法扩展,因为数据存储区将其转换为n个查询,其中n是“用户”的大小。

为了解决这个问题,我分配了可计算的密钥名称。在上面的示例中,事件的键名称为:

event_<dd/mm/yy>_<user_key>

这样,您可以计算今天给定的实体的所有可能的键名。获得此列表后,您可以使用:

db.get_by_key_name(key_names) 

...并行获取实体,并且比使用“IN”查询快得多!