[2009年8月21日更新名单]
帮助我编制在Google App Engine上构建应用程序的所有优点和缺点的列表
优点:
缺点:
已知的问题!!:http://code.google.com/p/googleappengine/issues/list
硬限制
每个开发人员的
应用程序 -
每个请求10 次 -
每个应用程序30秒文件 - 3,000个
HTTP响应大小 - 10 MB
数据存储区项目大小 - 1 MB
应用程序代码大小 - 150 MB
更新 Blob存储现在允许存储高达50MB的文件
Pro还是Con?
App Engine的基础架构消除了构建应用程序以扩展到数百万次点击的许多系统管理和开发挑战.Google会根据需要将代码部署到群集,监控,故障转移和启动应用程序实例.
虽然其他服务允许用户安装和配置几乎任何*NIX兼容软件,但App Engine要求开发人员使用Python或Java作为编程语言和一组有限的API.当前的API允许从BigTable非关系数据库存储和检索数据; 发出HTTP请求; 发送电子邮件; 操纵图像; 和缓存.大多数现有Web应用程序无法在未经修改的情况下在App Engine上运行,因为它们需要关系数据库.
如果我通过http:// localhost:8080从运行服务器的同一台Win 7 PC 访问我的网站,那么它运行良好.
如果我尝试从另一台PC访问(使用我的内部PC的IP http://192.168.1.98:8080),那么它不起作用.而且,即使在同一台机器上也无法通过此ip访问它.我究竟做错了什么?
(我试图在我的Win 7 PC上禁用防火墙 - 它没有帮助)
我想将应用上传到Google App Engine:
我明白了
Error parsing yaml file:
mapping values are not allowed here
in "/home/antonio/Desktop/ATI/climate-change/app.yaml", line 2, column 8
Run Code Online (Sandbox Code Playgroud)
跑步时
./appcfg.py update /home/antonio/Desktop/ATI/climate-change
Run Code Online (Sandbox Code Playgroud)
使用此app.yaml文件:
application:climate-change
version: 1
runtime: python27
api_version: 1
threadsafe: true
handlers:
- url: /.*
script: helloworld.app
Run Code Online (Sandbox Code Playgroud)
第2行,第8列对应于版本行.这有什么不对?顺便说一句,我在这里使用的是Ubuntu 12.04.
我在App Engine灵活的env教程上关注了Nodejs:http://psoud.google.com/nodejs/getting-started/hello-world
成功部署并测试了本教程之后,我将代码更改为稍微进行了实验并成功部署了它......然后让它继续运行,因为这是一个测试环境(不是公共的).
一个月后,我收到谷歌超过370美元的账单!
在交易细节中,我看到以下内容:
2017年10月1日 - 31日App Engine Flex实例RAM:5948.774吉比特小时([MYPROJECT])$ 42.24
2017年10月1日 - 31日App Engine Flex实例核心时间:5948.774小时([MYPROJECT])$ 312.91
这个具有近0个请求的测试环境如何需要大约6,000小时的资源?在最糟糕的情况下,我会假设720小时全天运行一个月@ 0.05美元/小时将花费我~40美元. https://cloud.google.com/appengine/pricing
有人可以帮助阐明这一点吗?我无法找出为什么需要这么多资源?
谢谢您的帮助!
更新:请注意,我确实对package.json进行了一次修改:我将nodemon添加为依赖项,并将其添加为"nmp start"脚本的一部分.虽然我怀疑这解释了6000小时的资源:
"scripts": {
"deploy": "gcloud app deploy",
"start": "nodemon app.js",
"dev": "nodemon app js",
"lint": "samples lint",
"pretest": "npm run lint",
"system-test": "samples test app",
"test": "npm run system-test",
"e2e-test": "samples test deploy"
},
Run Code Online (Sandbox Code Playgroud)
App.yaml(默认 - 教程没有变化)
runtime: nodejs
env: flex
Run Code Online (Sandbox Code Playgroud) 更新:请,如果有人可以提供帮助:谷歌正在等待他们的错误跟踪工具上的输入和此问题的示例.如果您有针对此问题的可重现步骤,请分享:https://code.google.com/p/googleappengine/issues/detail?id = 10937
我正在尝试使用Google App Engine后端从StackExchange API获取数据.您可能知道,StackExchange的某些API是特定于站点的,要求开发人员针对用户注册的每个站点运行查询.
所以,这是我从这些网站获取时间线数据的后端代码.该feed_info_site变量保存StackExchange站点名称(如'security','serverfault'等).
data = json.loads(urllib.urlopen("%sme/timeline?%s" %
(self.API_BASE_URL, urllib.urlencode({"pagesize": 100,
"fromdate": se_since_timestamp, "filter": "!9WWBR
(nmw", "site": feed_info_site, "access_token":
decrypt(self.API_ACCESS_TOKEN_SECRET, self.access_token), "key":
self.API_APP_KEY}))).read())
for item in data['items']:
... # code for parsing timeline items
Run Code Online (Sandbox Code Playgroud)
在除Stack Overflow之外的所有站点上运行此查询时,一切正常.有点奇怪的是,当feed_info_site变量设置为时'stackoverflow',我从Google App Engine收到以下错误:
HTTPException: Invalid and/or missing SSL certificate for URL:
https://api.stackexchange.com/2.2/me/timeline?
filter=%219WWBR%28nmw&access_token=
<ACCESS_TOKEN_REMOVED>&fromdate=1&pagesize=100&key=
<API_KEY_REMOVED>&site=stackoverflow
Run Code Online (Sandbox Code Playgroud)
当然,如果我在Safari中运行相同的查询,我会得到我期望从API获得的JSON结果.所以问题实际上在于Google的URLfetch服务.我在Stack Overflow上发现了几个与类似的HTTPS/SSL异常相关的主题,但没有接受的答案解决了我的问题.我试过删除cacerts.txt文件.我也试过打电话validate_certificate=False,没有成功.
我认为问题与HTTPS/SSL并不严格相关.如果是这样,您如何解释更改单个API参数会导致请求失败?
使用Google App Engine管理第三方Python库的最佳策略是什么?
说我想使用Flask,一个webapp框架.博客条目说这样做,这似乎不对:
$ cd /tmp/
$ wget http://pypi.python.org/packages/source/F/Flask/Flask-0.6.1.tar.gz
$ tar zxf Flask-0.6.1.tar.gz
$ cp -r Flask-0.6.1/flask ~/path/to/project/
(... repeat for other packages ...)
Run Code Online (Sandbox Code Playgroud)
必须有更好的方法来管理第三方代码,特别是如果我想跟踪版本,测试升级或两个库共享一个子目录.我知道,Python可以从zipfiles导入模块和PIP可以用美妙的需求文件工作,我已经看到了PIP具有zip与GAE使用命令.
我在App Engine数据存储区遇到了一个有趣的限制.我正在创建一个处理程序来帮助我们分析一个生产服务器上的一些使用数据.为了执行分析,我需要查询和汇总从数据存储中提取的10,000多个实体.计算并不难,它只是通过使用样本的特定过滤器的项目的直方图.我遇到的问题是,在达到查询截止日期之前,我无法快速从数据存储区中获取数据以进行任何处理.
我已经尝试了所有我能想到的将查询分块到并行RPC调用以提高性能,但根据appstats我似乎无法让查询实际并行执行.无论我尝试什么方法(见下文),似乎RPC总是回到顺序下一个查询的瀑布.
注意:查询和分析代码确实有效,它只是运行缓慢,因为我无法从数据存储中快速获取数据.
我没有可以分享的实时版本,但这里是我正在谈论的系统部分的基本模型:
class Session(ndb.Model):
""" A tracked user session. (customer account (company), version, OS, etc) """
data = ndb.JsonProperty(required = False, indexed = False)
class Sample(ndb.Model):
name = ndb.StringProperty (required = True, indexed = True)
session = ndb.KeyProperty (required = True, kind = Session)
timestamp = ndb.DateTimeProperty(required = True, indexed = True)
tags = ndb.StringProperty (repeated = True, indexed = True)
Run Code Online (Sandbox Code Playgroud)
您可以将样本视为用户使用给定名称功能的时间.(例如:'systemA.feature_x').标签基于客户详细信息,系统信息和功能.例如:['winxp','2.5.1','systemA','feature_x','premium_account']).因此,标签形成一组非规范化的标记,可用于查找感兴趣的样本.
我试图做的分析包括获取一个日期范围,并询问每个客户帐户(公司,而不是每个用户)每天(或每小时)使用的功能集(可能是所有功能)的特征次数.
因此处理程序的输入类似于:
输出将是:
[{
'company_account': <string>,
'counts': [
{'timeperiod': <iso8601 date>, …Run Code Online (Sandbox Code Playgroud) 我试图弄清楚如何"保留"BindingResult,以便它可以通过Spring <form:errors>标签用于后续的GET .我想这样做的原因是因为Google App Engine的SSL限制.我有一个通过HTTP显示的表单,帖子是一个HTTPS URL.如果我只转发而不是重定向,那么用户将看到https://whatever.appspot.com/my/form URL.我试图避免这种情况.任何想法如何处理这个?
以下是我想做的事情,但我在使用时只看到验证错误return "create".
@RequestMapping(value = "/submit", method = RequestMethod.POST)
public final String submit(
@ModelAttribute("register") @Valid final Register register,
final BindingResult binding) {
if (binding.hasErrors()) {
return "redirect:/register/create";
}
return "redirect:/register/success";
}
Run Code Online (Sandbox Code Playgroud) 我在Eclipse 3.7中创建了一个名为Guestbook的简单Java Google AppEngine应用程序,并尝试运行它.但是,我遇到了一个缺少快速修复的错误:
Description Resource Path Location Type
Java compiler level does not match the version of the installed Java project facet.
Guestbook Unknown Faceted Project Problem (Java Version Mismatch)
Run Code Online (Sandbox Code Playgroud)
我尝试导航到Project | 用于更改项目方面的属性.但是,我找不到处理"facet"的设置.

"安装Java项目方面"意味着什么,我该如何解决这个问题?
java ×2
deployment ×1
eclipse ×1
egg ×1
node.js ×1
pip ×1
python ×1
spring ×1
spring-mvc ×1
ssl ×1
urlfetch ×1
validation ×1
web2py ×1