我清除了数据存储中的所有实体,清除了memcache,使用API Explorer创建了一个实体,然后尝试在运行在localhost上的datastore控制台中创建另一个相同类型的实体:
内部服务器错误
服务器要么出错,要么无法执行请求的操作。
Traceback (most recent call last):
File "/home/tom/work/google-cloud-sdk/platform/google_appengine/lib/webapp2-2.5.1/webapp2.py", line 1536, in __call__
rv = self.handle_exception(request, response, e)
File "/home/tom/work/google-cloud-sdk/platform/google_appengine/lib/webapp2-2.5.1/webapp2.py", line 1530, in __call__
rv = self.router.dispatch(request, response)
File "/home/tom/work/google-cloud-sdk/platform/google_appengine/lib/webapp2-2.5.1/webapp2.py", line 1278, in default_dispatcher
return route.handler_adapter(request, response)
File "/home/tom/work/google-cloud-sdk/platform/google_appengine/lib/webapp2-2.5.1/webapp2.py", line 1102, in __call__
return handler.dispatch()
File "/home/tom/work/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/admin/admin_request_handler.py", line 97, in dispatch
super(AdminRequestHandler, self).dispatch()
File "/home/tom/work/google-cloud-sdk/platform/google_appengine/lib/webapp2-2.5.1/webapp2.py", line 572, in dispatch
return self.handle_exception(e, self.app.debug)
File "/home/tom/work/google-cloud-sdk/platform/google_appengine/lib/webapp2-2.5.1/webapp2.py", line 570, in dispatch
return method(*args, **kwargs)
File "/home/tom/work/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/admin/datastore_viewer.py", line 760, in get
count=20)
File "/home/tom/work/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/admin/datastore_viewer.py", line 121, in _get_entities
query = datastore.Query(kind, _namespace=namespace)
File "/home/tom/work/google-cloud-sdk/platform/google_appengine/google/appengine/api/datastore.py", line 1361, in __init__
datastore_errors.BadArgumentError)
File "/home/tom/work/google-cloud-sdk/platform/google_appengine/google/appengine/api/datastore_types.py", line 181, in ValidateString
raise exception('%s must not be empty.' % name)
BadArgumentError: kind must not be empty.以下是gcloud版本的信息:
$ gcloud --version
Google Cloud SDK 157.0.0
app-engine-python 1.9.54
beta 2017.03.24
bq 2.0.24
core 2017.05.30
gcloud
gsutil 4.26有什么可能出了问题的线索吗?
发布于 2017-07-28 15:18:17
我想是Datastore控制台里的一个漏洞。
我能够在我的机器上复制同样的错误。如果您查看异常中的跟踪,您会看到(从底部第四):
File "/.../google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/admin/datastore_viewer.py", line 760, in get
count=20)如果您从第735行查看该文件,您会看到:
def get(self, entity_key_string=None):
super(DatastoreEditRequestHandler, self).get(entity_key_string)
if entity_key_string:
entity_key = datastore.Key(entity_key_string)
entity_key_name = entity_key.name()
entity_key_id = entity_key.id()
namespace = entity_key.namespace()
kind = entity_key.kind()
entities = [datastore.Get(entity_key)]
parent_key = entity_key.parent()
if parent_key:
parent_key_string = _format_datastore_key(parent_key)
else:
parent_key_string = None
else:
entity_key = None
entity_key_string = None
entity_key_name = None
entity_key_id = None
namespace = self.request.get('namespace')
kind = self.request.get('kind')
entities, _ = _get_entities(kind,
namespace,
order=None,
start=0,
count=20) ### line 760 #######
...在最后一行中,kind应该是包含您正在使用的模型的模型名称的字符串。相反,如果将跟踪返回到函数调用中,则会看到kind是一个空字符串。我不认为在这个时候你能做什么来解决它。我建议现在使用交互式控制台来创建/编辑数据存储实体,只需要使用查看器来查看它们。我相信谷歌很快就会通过更新来解决这个问题。
编辑:如果您真的想让Datastore控制台正常工作,我实际上找到了一个麻烦的解决方案,但是我仍然建议您只使用交互式控制台。hacky修复是手动将kind变量输入数据存储控制台发送的URL中。
当您单击"Create“并获取问题中显示的错误时,请查看url:
http://localhost:8000/datastore/edit?kind=&next=http%3A%2F%2Flocalhost%3A8000%2Fdatastore%3Fkind%3DUnique你看到...:8000/datastore/edit?kind=&...了。就在那里,输入模型名。例如,假设您的模型名为User
http://localhost:8000/datastore/edit?kind=User&next=http%3A%2F%2Flocalhost%3A8000%2Fdatastore%3Fkind%3DUnique这给我带来了类用户的“创建新实体”表单(我的模型之一),并且我能够用该表单创建一个用户。
P.S.您可能还需要更改url末尾的模型名(其中我说的是Unique),以匹配您正在创建的类型,因为该模型名是在创建新实体后显示的类型。因此,我创建了一个User,但随后显示了Unique实体(Unique是我的模型名称之一)。
https://stackoverflow.com/questions/44427631
复制相似问题