Я пытаюсь настроить приложение на основе Google App Engine с помощью функции управляемой виртуальной машины.
Я использую общую библиотеку, написанную на C ++ с использованием ctypes
cdll.LoadLibrary('./mylib.so')
который регистрирует функцию обратного вызова
CB_FUNC_TYPE = CFUNCTYPE(None, eSubscriptionType)
cbFuncType = CB_FUNC_TYPE(scrptCallbackHandler)
в котором я хочу сохранить данные в хранилище данных ndb
def scrptCallbackHandler(arg):
model = Model(name=str(arg.data))
model.put()
Я регистрирую функцию обратного вызова, в которой я хочу взять данные из программы C ++ и поместить их в хранилище данных ndb. Это приводит к ошибке. На сервере разработки он ведет себя немного иначе, поэтому с производственного сервера:
suspended generator _put_tasklet(context.py:343) raised BadRequestError(Application Id (app) format is invalid: '_')LOG 2 1429698464071045 suspended generator put(context.py:810) raised BadRequestError(Application Id (app) format is invalid: '_')
Traceback (most recent call last):
File "_ctypes/callbacks.c", line 314, in 'calling callback function' File "/home/vmagent/app/isw_cloud_client.py", line 343, in scrptCallbackHandler node.put()
File "/home/vmagent/python_vm_runtime/google/appengine/ext/ndb/model.py", line 3380, in _put return self._put_async(**ctx_options).get_result()
File "/home/vmagent/python_vm_runtime/google/appengine/ext/ndb/tasklets.py", line 325, in get_result self.check_success()
File "/home/vmagent/python_vm_runtime/google/appengine/ext/ndb/tasklets.py", line 368, in _help_tasklet_along value = gen.throw(exc.__class__, exc, tb)
File "/home/vmagent/python_vm_runtime/google/appengine/ext/ndb/context.py", line 810, in put key = yield self._put_batcher.add(entity, options)
File "/home/vmagent/python_vm_runtime/google/appengine/ext/ndb/tasklets.py", line 368, in _help_tasklet_along value = gen.throw(exc.__class__, exc, tb)
File "/home/vmagent/python_vm_runtime/google/appengine/ext/ndb/context.py", line 343, in _put_tasklet keys = yield self._conn.async_put(options, datastore_entities)
File "/home/vmagent/python_vm_runtime/google/appengine/ext/ndb/tasklets.py", line 454, in _on_rpc_completion result = rpc.get_result()
File "/home/vmagent/python_vm_runtime/google/appengine/api/apiproxy_stub_map.py", line 613, in get_result return self.__get_result_hook(self)
File "/home/vmagent/python_vm_runtime/google/appengine/datastore/datastore_rpc.py", line 1827, in __put_hook self.check_rpc_success(rpc)
File "/home/vmagent/python_vm_runtime/google/appengine/datastore/datastore_rpc.py", line 1342, in check_rpc_success raise _ToDatastoreError(err)google.appengine.api.datastore_errors.BadRequestError: Application Id (app) format is invalid: '_'
Запуск программы C ++ запускается вызовом обработчика запросов, но выполняется в фоновом режиме и принимает входящие данные, которые должны быть обработаны в обратном вызове.
Обновление. Как уже указывал Тим, похоже, что контекст обработчика wsgi потерян. Скорее всего, решением здесь было бы как-то создать контекст приложения.
os.environ
ничего нет, я думаю, что мне нужно как-то создать контекст. - person pfried   schedule 22.04.2015