我收到以下错误。
com.google.apphosting.api.ApiProxy $ RequestTooLargeException:对API调用datastore_v3.Put()的请求太大。
我正在使用Objectify 4.0,没有上传任何文件。我正在为我的应用程序使用DataStore,但1Mb以上的唯一项是实体中的_valuesBlob _ah_SESSION。
控制台的映像位于:http : //goo.gl/qP7v7U
我不知道如何解决该问题,即使之前已问过错误,我的问题是我没有使用文件,而实际上是在使用数据存储。
编辑:再次测试,它似乎在删除操作中中断。这是日志。
Run Code Online (Sandbox Code Playgroud)W 12:37:39.798 /editarContrato.jsf com.google.apphosting.api.ApiProxy$RequestTooLargeException: The request to API call datastore_v3.Put() was too large. at com.google.apphosting.utils.runtime.ApiProxyUtils.convertApiError(ApiProxyUtils.java:42) at com.google.apphosting.runtime.ApiProxyImpl$AsyncApiFuture.success(ApiProxyImpl.java:497) at com.google.apphosting.runtime.ApiProxyImpl$AsyncApiFuture.success(ApiProxyImpl.java:411) at com.google.net.rpc3.client.RpcStub$RpcCallbackDispatcher$1.runInContext(RpcStub.java:856) at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:444) at com.google.tracing.CurrentContext.runInContext(CurrentContext.java:220) at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:308) at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:300) at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:441) at com.google.net.rpc3.client.RpcStub$RpcCallbackDispatcher.runCallback(RpcStub.java:894) at com.google.net.rpc3.client.RpcStub$RpcCallbackDispatcher.rpcFinished(RpcStub.java:904) at com.google.net.rpc3.client.RpcStub$RpcCallbackDispatcher.success(RpcStub.java:883) at com.google.net.rpc3.impl.client.RpcClientInternalContext.runCallbacks(RpcClientInternalContext.java:1130) at com.google.net.rpc3.impl.client.RpcClientInternalContext.finishRpcAndNotifyApp(RpcClientInternalContext.java:1030) at com.google.net.rpc3.impl.client.RpcNetChannel.afterFinishingActiveRpc(RpcNetChannel.java:1459) at com.google.net.rpc3.impl.client.RpcNetChannel.finishRpc(RpcNetChannel.java:1280) at com.google.net.rpc3.impl.client.RpcNetChannel.handleResponse(RpcNetChannel.java:2995) at com.google.net.rpc3.impl.client.RpcNetChannel.messageReceived(RpcNetChannel.java:2731) at com.google.net.rpc3.impl.client.RpcNetChannel.access$2900(RpcNetChannel.java:175) at com.google.net.rpc3.impl.client.RpcNetChannel$TransportCallback.receivedMessage(RpcNetChannel.java:3922) at com.google.net.rpc3.impl.client.RpcChannelTransportData$TransportCallback.receivedMessage(RpcChannelTransportData.java:669) at com.google.net.rpc3.impl.wire.RpcBaseTransport.receivedMessage(RpcBaseTransport.java:457) at com.google.apphosting.runtime.udrpc.UdrpcTransport$ClientAdapter.receivedMessage(UdrpcTransport.java:577) at com.google.apphosting.runtime.udrpc.UdrpcTransport.dispatchPacket(UdrpcTransport.java:386) at com.google.apphosting.runtime.udrpc.UdrpcTransport.readPackets(UdrpcTransport.java:283) at …
session google-app-engine primefaces jsf-2 google-cloud-datastore
Guido van Rossum的NdbGoogle App Engine库有一个我觉得好奇的查询语法.假设您想要找到所有满意的用户,您可以编写此查询:
User.query(User.happy == True)
Run Code Online (Sandbox Code Playgroud)
我读到:
query方法的函数调用User,继承自ndb.Model.好到目前为止.User.happy和值之间进行布尔比较True.我希望表达式能够评估False(就像那样dict.keys == True),所以上面应该等同于:
User.query(False)
Run Code Online (Sandbox Code Playgroud)
Ndb如何通过它做任何聪明的事情?我错过了什么蟒蛇魔法?
python google-app-engine app-engine-ndb google-cloud-datastore
我目前在NDB中有一个模型,我想更改属性名称而不必触及NBD.假设我有以下内容:
from google.appengine.ext import ndb
class User(ndb.Model):
company = ndb.KeyProperty(repeated=True)
Run Code Online (Sandbox Code Playgroud)
我想要的是更像这样的东西:
class User(ndb.Model):
company_ = ndb.KeyProperty(repeated=True)
@property
def company(self):
return '42'
@company.setter
def company(self, new_company):
#set company here
Run Code Online (Sandbox Code Playgroud)
这样做有相对无痛的方法吗?我希望使用属性getter/setter,但考虑到当前的实现,我想避免触及底层数据存储.
python google-app-engine app-engine-ndb google-cloud-datastore
假设我从用户输入websafe url创建一个密钥
key = ndb.Key(urlsafe=some_user_input)
Run Code Online (Sandbox Code Playgroud)
我怎样才能检查它some_user_input是否有效?
我当前的实验表明,ProtocolBufferDecodeError (Unable to merge from string.)如果some_user_input无效,上面的语句将抛出异常,但无法从API中找到任何相关信息.有人可以确认这一点,并指出一些更好的方法来进行用户输入有效性检查而不是捕获异常吗?
非常感谢!
我已经使用App Engine的旧数据库数据存储API看到了这个问题的解决方案,但在使用较新的NDB API 时无法找到解决方案.
添加迁移支持的最佳方法是什么,以便我能够从旧版本的架构迁移到新版本.编写迁移脚本是否最好,这将如何工作?
像迁移这样的模式(注意样本在NDB中):
class Picture(ndb.Model):
author = ndb.StringProperty()
png_data = ndb.BlobProperty()
name = ndb.StringProperty(default='') # Unique name.
Run Code Online (Sandbox Code Playgroud)
对于这样的更新:
class Picture(ndb.Model):
author = ndb.StringProperty()
png_data = ndb.BlobProperty()
name = ndb.StringProperty(default='') # Unique name.
num_votes = ndb.IntegerProperty(default=0)
avg_rating = ndb.FloatProperty(default=0)
Run Code Online (Sandbox Code Playgroud)
非常感谢!
python google-app-engine app-engine-ndb google-cloud-datastore
模型定义
class SeqNumbers(ndb.Model):
"""APNS Server -- SeqNumbers object that stores sequence number of stored messages between two devices"""
SeqNumberStart = ndb.IntegerProperty(required=True)
SeqNumberEnd = ndb.IntegerProperty(required=True)
Sourcein = ndb.StringProperty
Destin = ndb.StringProperty
Run Code Online (Sandbox Code Playgroud)
要添加到数据存储区的代码.这导致TypeError:无法设置非属性Sourcein(帖子末尾的完整错误)
任何帮助理解正在发生的事情将不胜感激.
data ={}
data['SeqNumberStart']=0
data['SeqNumberEnd']=0
data['key']=seqKey
data['Sourcein']='user_IOT'
data['Destin']='user_SmartHome'
SeqNumbers(**data).put()
Run Code Online (Sandbox Code Playgroud)
GAE日志中的完全错误
E 02:08:17.725 Encountered unexpected error from ProtoRPC method implementation: TypeError (Cannot set non-property Sourcein)
Traceback (most recent call last):
File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/protorpc-1.0/protorpc/wsgi/service.py", line 181, in protorpc_service_app
response = method(instance, request)
File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/endpoints-1.0/endpoints/api_config.py", line 1332, in invoke_remote
return remote_method(service_instance, request)
File …Run Code Online (Sandbox Code Playgroud) Google数据存储区将于7月1日生效(https://cloud.google.com/datastore/docs/pricing),我无法了解更改将如何影响我.
我的KIND确实有一个结构.我的类型被调用MESSAGES,它看起来像每个实体:
ID
FROM
TO
MESSAGE
DATE_CREATED
MISC1
MISC2
Run Code Online (Sandbox Code Playgroud)
我上有一个索引ID,FROM,TO,DATE_CREATED,MISC1,和MISC2.随着新的定价:
将新实体插入此类的成本是多少?
如果我运行查询来获取所有属性并返回10个实体,那么查询的成本是多少?
如果我运行投影查询以获取除MISC1和MISC2之外的所有属性并返回10个实体,那么查询的成本是多少?
如果我用所有这些索引更新一个实体会有什么代价?
旧的定价主要取决于您拥有多少指数,但似乎新价格根本不是基于指数.所有关于理解读写成本的文档都会显示索引,因此如果没有定价模型中的索引,它会如何应用.我想知道这4种类型的操作在读/写/小操作方面会花多少钱.
google-app-engine google-cloud-datastore google-cloud-platform
运行此代码时,使用相同的site_id:
int_id= int(self.request.get("site_id"))
site_draft = SiteDraft.get_by_id(int_id)
Run Code Online (Sandbox Code Playgroud)
我收到这个错误:
INFO 2016-06-27 12:39:19,040 module.py:788] minisites: "GET /edit/5891733057437696 HTTP/1.1" 500 -
return self.handle_exception(e, self.app.debug)
File "C:\Program Files\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\lib\webapp2-2.3\webapp2.py", line 545, in dispatch
return method(*args, **kwargs)
File "C:\Users\Yuri\Documents\WiseStamp\Server\minisites\web\pages\edit_site.py", line 21, in get
self.post(args)
File "C:\Users\Yuri\Documents\WiseStamp\Server\minisites\web\pages\edit_site.py", line 44, in post
site_draft = SiteDraft.get_by_id(int_id)
File "C:\Program Files\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\ext\ndb\utils.py", line 160, in positional_wrapper
return wrapped(*args, **kwds)
File "C:\Program Files\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\ext\ndb\model.py", line 3602, in _get_by_id
return cls._get_by_id_async(id, parent=parent, **ctx_options).get_result()
File "C:\Program Files\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\ext\ndb\tasklets.py", line 378, in get_result …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Google App Engine的灵活Python 3环境和Cloud Datastore。在本地进行测试时,这(通常)要求在Gunicorn之类的应用中运行您的应用,并从中访问Datastore API gcloud.datastore。例如:
import gcloud.datastore as g_datastore
ds = g_datastore.Client(...)
entity = datastore.Entity(key=ds.key(...))
ds.put(entity)
Run Code Online (Sandbox Code Playgroud)
在本地运行(在开发人员模式下)时,实体的状态会在两次运行之间保持不变。我一辈子都无法弄清楚它们的存储位置或如何清除在创建/访问后创建的dev数据存储gcloud.datastore.Client。据我所知,它使用的位置与ndb通过via运行时所使用的位置不同dev_appserver.py。
我已经尝试通过以下方式解决问题(运行OS X时):
$ touch foo
$ GCLOUD_PROJECT=... python .../main.py
* Running on http://127.0.0.1:8080/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger pin code: ...
127.0.0.1 - - [04/Jul/2016 10:36:01] "GET / HTTP/1.1" 200 -
...
^C
$ sudo find /private/tmp /var/db /var/tmp ~/.config/gcloud ~/Library -newer foo …Run Code Online (Sandbox Code Playgroud) google-cloud-datastore google-app-engine-python app-engine-flexible
有据可查,快速写入具有单调递增值作为键或索引属性的实体类型对于性能来说是一个坏主意。
如何索引布尔属性或具有类似枚举值的属性(例如 Genders)上的实体?
我的猜测是对低基数属性进行索引可能会遇到同样的问题,因为这些属性没有内置类型。但也许对布尔属性有特殊处理?
database data-modeling database-performance google-cloud-datastore google-cloud-platform