标签: google-app-engine-python

在Google App Engine上选择Java与Python

目前,Google App Engine同时支持Python和Java.Java支持不太成熟.但是,Java似乎有更长的库列表,特别是对Java字节码的支持,无论用于编写该代码的语言如何.哪种语言会提供更好的性能和更强大的功能?请指教.谢谢!

修改: http ://groups.google.com/group/google-appengine-java/web/will-it-play-in-app-engine?pli = 1

编辑: 通过"权力"我的意思是更好的可扩展性和框架之外的可用库的包含.但是Python只允许纯Python库.

python java google-app-engine google-cloud-platform google-app-engine-python

161
推荐指数
9
解决办法
7万
查看次数

Google 应用程序引擎部署失败 - 查找“pip”的模块规范时出错(AttributeError:模块“__main__”没有属性“__file__”)

我们使用命令提示符c:\gcloud app deploy app.yaml,但出现以下错误:

Running "python3 -m pip install --requirement requirements.txt --upgrade --upgrade-strategy only-if-needed --no-warn-script-location --no-warn-conflicts --force-reinstall --no-compile (PIP_CACHE_DIR=/layers/google.python.pip/pipcache PIP_DISABLE_PIP_VERSION_CHECK=1)"
Step #2 - "build": /layers/google.python.pip/pip/bin/python3: Error while finding module specification for 'pip' (AttributeError: module '__main__' has no attribute '__file__')
Step #2 - "build": Done "python3 -m pip install --requirement requirements.txt --upgr..." (34.49892ms)
Step #2 - "build": Failure: (ID: 0ea8a540) /layers/google.python.pip/pip/bin/python3: Error while finding module specification for 'pip' (AttributeError: module '__main__' has no attribute '__file__')
Step #2 - "build": …
Run Code Online (Sandbox Code Playgroud)

python google-app-engine google-app-engine-python

18
推荐指数
2
解决办法
2112
查看次数

当多个订单属性存在时,加快App Engine本地SDK数据库查询?

我有一个看起来像这样的查询:

query = (models.Foo.all()
  .filter('x =', x)
  .filter('y =', y)
  .filter('z =', z)
  .filter('zz =', zz)
  .order('-a'))
Run Code Online (Sandbox Code Playgroud)

它在~100ms内在本地SDK上运行,并以可接受的速度在云中运行.当我添加第二个订单(所以看起来像这样:)

query = (models.Foo.all()
  .filter('x =', x)
  .filter('y =', y)
  .filter('z =', z)
  .filter('zz =', zz)
  .order('-a')
  .order('-b'))
Run Code Online (Sandbox Code Playgroud)

..在本地SDK上需要大约10秒(长100倍),并且在云中以与之前相同的速度运行.我需要有二阶属性.

有关设置的一些细节:

  • Windows SDK版本1.9.50
  • Python 2.7
  • 使用db模型,而不是ndb
  • 我已经开始使用新的本地数据库(替换了datastore.db)并从头开始重建记录
  • 本地有大约1200个Foo实体(云中约为3M)
  • 我跑sqlite3 datastore.db "PRAGMA integrity_check了本地数据库,没有报告任何错误

问题:如何在本地更快地运行查询?(在整个时间里,10s滞后的开发真的很困难.)

python sqlite google-app-engine google-app-engine-python

15
推荐指数
1
解决办法
159
查看次数

google.appengine.ext.ndb和gcloud.datastore有什么区别?

ndb :(来自google.appengine.ext import ndb)

数据存储区:(来自gcloud import datastore)

有什么不同?我已经看到它们都使用了,并暗示它们都将数据保存到谷歌数据存储区.为什么有两种不同的实现?

google-app-engine app-engine-ndb google-cloud-datastore google-app-engine-python

12
推荐指数
1
解决办法
960
查看次数

AppEngine urlfetch validate_certificate = False/None未被遵守

在AppEngine开发人员应用程序服务器中,我收到如下错误:

SSLCertificateError: Invalid and/or missing SSL certificate for URL ...
Run Code Online (Sandbox Code Playgroud)

当我这样获取https带有自签名证书的服务器时(几乎总是localhost通过ssh端口转发到vm):

result = urlfetch.fetch(url=url, method=method, payload=payload,
                        deadline=DEADLINE, validate_certificate=None)
Run Code Online (Sandbox Code Playgroud)

人们不会想到为无效证书的SSL失败validate_certificateFalse,虽然这很可能是2.7.9政策在Python总是验证SSL证书的副作用.

请注意,传递False(而不是None)for validate_certificate也不起作用.

这个问题在Python 2.7.9-10上通过OS X 10.10.2-4上的Homebrew/XCode与AppEngine 1.9.18到1.19.26发生.

在Google App Engine上存在关于此问题(例如12096),但我正在寻找解决方法.

这是我试图解决的问题:

  1. 将证书添加到Mac的登录密钥链(在浏览器中工作,而不是从Python工作)

  2. 将证书添加到app-engine-python/lib/cacerts/cacerts.txt和/或./lib/cacerts/urlfetch_cacerts.txt (尽管这可能需要重启验证为它工作,因为这似乎是在那里它们被使用的唯一的情况下)与如

    $ echo >> /usr/local/share/app-engine-python/lib/cacerts/urlfetch_cacerts.txt

    $ openssl x509 -subject -in server.crt >> /usr/local/share/app-engine-python/lib/cacerts/urlfetch_cacerts.txt

  3. 使用PEP-0476解决方法禁用ssl HTTPs检查,即

    ssl._create_default_https_context = ssl._create_unverified_context

    import ssl(1149行左右)或之后google/appengine/dist27/python_std_lib/httplib.py

这在Mac上尤其成问题,因为从XCode …

python google-app-engine urllib2 ssl-certificate google-app-engine-python

11
推荐指数
1
解决办法
2776
查看次数

AppEngine dev_appserver - urllib2.urlopen与localhost url的问题

UPDATE

App Engine SDK 1.9.24于2015年7月20日发布,因此如果您仍然遇到此问题,您应该可以通过更新来解决此问题.有关确切问题和解决方案的解释,请参阅下面的+ jpatokal的答案.

原始问题

我有一个我正在使用的应用程序,并在本地开发时遇到麻烦.

我们有一些共享代码,用于检查我们的应用程序使用的auth服务器urllib2.urlopen.当我在本地开发时,我的应用程序上的404被AppEngine请求拒绝,但是请求从终端获得成功.

我在端口上运行appengine localhost:8000,并且启动了auth服务器localhost:8001

import urllib2

url = "http://localhost:8001/api/CheckAuthentication/?__client_id=dev&token=c7jl2y3smhzzqabhxnzrlyq5r5sdyjr8&username=amadison&__signature=6IXnj08bAnKoIBvJQUuBG8O1kBuBCWS8655s3DpBQIE="

try:
  r = urllib2.urlopen(url)
  print(r.geturl())
  print(r.read())
except urllib2.HTTPError as e:
  print("got error: {} - {}".format(e.code, e.reason))
Run Code Online (Sandbox Code Playgroud)

这是got error: 404 - Not Found从AppEngine中产生的

似乎AppEngine正在将架构,主机和端口添加到我想要命中的URL的PATH部分,因为这是我在auth服务器上看到的:

[02/Jul/2015 16:54:16] "GET http://localhost:8001/api/CheckAuthentication/?__client_id=dev&token=c7jl2y3smhzzqabhxnzrlyq5r5sdyjr8&username=amadison&__signature=6IXnj08bAnKoIBvJQUuBG8O1kBuBCWS8655s3DpBQIE= HTTP/1.1" 404 10146
Run Code Online (Sandbox Code Playgroud)

从请求标题我们可以看到整个方案和主机和端口作为路径的一部分传递(下面的标题部分):

 'HTTP_HOST': 'localhost:8001',
 'PATH_INFO': u'http://localhost:8001/api/CheckAuthentication/',
 'SERVER_PORT': '8001',
 'SERVER_PROTOCOL': 'HTTP/1.1',
Run Code Online (Sandbox Code Playgroud)

有没有办法让AppEngine Dev服务器在另一个端口上将这个请求劫持到localhost?或者我不是在误解发生了什么?在我们的域名不同的生产中,一切都很好.

提前感谢任何协助,帮助我指出正确的方向.

google-app-engine urllib2 google-app-engine-python

10
推荐指数
1
解决办法
318
查看次数

GSpread ImportError:没有名为oauth2client.service_account的模块

好的我正在跟随"成为技术营销人员"课程,我正在尝试学习如何使用GSpread管理Google Spreadsheets.我已经按照http://gspread.readthedocs.io/en/latest/oauth2.html上的文档进行了操作.我按照上面第二个URL中的步骤操作了一个包含以下代码的文档:

import gspread
from oauth2client.service_account import ServiceAccountCredentials

scope = ['https://spreadsheets.google.com/feeds']

credentials = ServiceAccountCredentials.from_json_keyfile_name('DFS Google Sheets Data Imports-7205de852ff7.json', scope)

gc = gspread.authorize(credentials)

wks = gc.open("Authority Scraper").sheet1
wks.update_cell(1,2,"Hello World!")
Run Code Online (Sandbox Code Playgroud)

从那里我得到了终端中的错误:来自oauth2client.service_account import ServiceAccountCredentials ImportError:没有名为oauth2client.service_account的模块

终端错误打印输出

有人请帮帮我.其他没有名为oath2client.service_account的模块的答案对我不起作用.谢谢!

python google-api-python-client gspread google-app-engine-python

9
推荐指数
2
解决办法
1万
查看次数

在NDB(Python的Google App Engine数据存储库)中自动使用缓存是否会使事务模型失效?

Google Cloud Datastore的一个主要卖点是它在实体组中提供了强大的一致性.

Cloud Datastore确保按键和祖先查询的实体查找始终接收强一致性数据.

[数据存储区适用于]基于ACID属性的交易,例如,将资金从一个银行账户转移到另一个银行账户.

NDB库是从谷歌应用程序引擎访问数据存储为Python的记录方式.

但是,默认情况下,NDB库使用缓存来加速结果.使用的缓存是"上下文缓存"和内存缓存.但是这些缓存都不能与数据存储区进行事务更新.因此,似乎必须放弃重要的一致性属性(强调我的):

提交事务时,其上下文将尝试从memcache中删除所有此类实体.但请注意,某些故障可能会阻止这些删除的发生.

我对此的理解是否正确?也就是说,在默认配置中使用NDB库时,即使在实体组内也没有一致性保证?

如果我是对的,这是一个大问题.

它牺牲了数据存储区的最大特性.所有这些关于一致性和ACID事务的文档.在Google IO上谈论如何使用实体组来获得一致性.甚至是研究论文.而且,在文档的一个小角落里,在最随意的句子中,我知道我没有在默认配置中获得这些属性.

这令人难以置信的误导.我相信大多数人都没见过这个.大多数实现可能期望实体组内的ACID事务,但他们没有得到它.这些是生产代码中的严重错误.

这是实施和文档的重大失败.默认情况下永远不应该牺牲速度的一致性.一致性是实体组的重点.如果实现做了这个意想不到的事情,它会如此戏剧性地改变语义,那么文档应该让它变得非常清晰.

google-app-engine app-engine-ndb google-cloud-datastore google-app-engine-python

8
推荐指数
1
解决办法
398
查看次数

如何在 App Engine Flex (Python 3.7) 中本地模拟 Google 云任务服务?

我已经使用谷歌应用程序引擎标准环境(Python 2.7)几天了。它提供了一个很好的本地开发服务器,在本地提供任务队列、数据存储等服务。

最近我一直在为一些项目探索App Engine Flex 环境 (Python 3.7) 。在其中,我尝试使用各种服务,如 Cloud Tasks、GCS、Pubsub 等。一些服务(如 pubsub)有一个模拟器可以在本地运行。我找不到这样的云任务模拟器。

有没有办法在本地模拟/模拟云任务?

google-app-engine google-app-engine-python app-engine-flexible

8
推荐指数
2
解决办法
4775
查看次数

Google App Engine:通过 Python 使用自定义入口点

我开始学习 Google App Engine,并使用 Flask 应用程序编写了一个基本的 main.py 文件,该文件运行良好。这是前几行代码:

from flask import Flask, jsonify

app = Flask(__name__)

@app.route("/")
def root():
    return jsonify({'status': "Success!"}), 200
Run Code Online (Sandbox Code Playgroud)

我想更改脚本的名称,因此我将其重命名为“test-app.py”并将此行添加到 app.yaml 中:

runtime: python38
entrypoint: test-app:app
Run Code Online (Sandbox Code Playgroud)

然后重新运行 gcloud app 部署。部署成功,但应用程序返回 500,日志中显示以下内容:

2021-05-09 22:23:40 default[20210509t222122]  "GET / HTTP/1.1" 500
2021-05-09 22:23:41 default[20210509t222122]  /bin/sh: 1: exec: test-app:app: not found
Run Code Online (Sandbox Code Playgroud)

我还从文档中尝试了这些:

entrypoint: gunicorn -b :$PORT test-app:app
entrypoint: uwsgi --http :$PORT --wsgi-file test-app.py --callable application
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,日志均显示“/bin/sh: 1: exec: (gunicorn|uwsgi): not found”

在 Lambda 中,入口点是通过处理程序选项设置的,默认情况下,该选项是名为 lambda_function 的文件中名为 lambda_handler() 的函数。看起来 …

google-app-engine google-app-engine-python

8
推荐指数
1
解决办法
4175
查看次数