За последние 48 часов или около того мое маленькое приложение GAE для python начало получать AssertionErrors из ndb.get_multi вызовов.ndb.get_multi return AssertionError
Добавлена полная трассировка, и ошибки генерируются на производственном сервере в ___Bitue_____________ в базе данных в строке 734 файла /base/data/.../ndb/model.py, а сбойное утверждение - b_val не является None с сообщением «Can not wrap None»
Ошибка не связана с какой-либо конкретной сущностью или сущностями, но пока я видел ее только с одним типом сущности (еще для проверки других).
Звонок get_multi предназначен только для дюжины ключей, и ошибка прерывистая, так что повторение ее иногда будет успешным. Или не ...
Я не вижу эту ошибку через удаленную оболочку, но я отмечаю, что моя локальная установка - 1.9.23, в то время как запись в журнале говорит, что производственный сервер 1.9.25 (GoogleAppEngineLauncher говорит, что моя локальная установка на данный момент)
Я добавляю обходное решение, чтобы поймать исключение и перебирать ключи, чтобы получить их индивидуально, но я все еще вижу предупреждение о «приостановленном генераторе» в строке 744 контекста.py ,
Предупреждение появляется при первом получении этого типа сущности из списка, по меньшей мере, для двух разных списков ключей (также как и для AssertionError).
Я не хочу, чтобы обернуть все вызовы get_multi таким образом.
Что происходит?
след вызовов TRACEBACK:
Cannot wrap None
Traceback (most recent call last):
File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 570, in dispatch
return method(*args, **kwargs)
File "/base/data/home/apps/s~thegapnetball/115.386356111937586421/handlers/assess.py", line 50, in get
rs = ndb.get_multi(t.players)
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/model.py", line 3905, in get_multi
for future in get_multi_async(keys, **ctx_options)]
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/tasklets.py", line 326, in get_result
self.check_success()
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/tasklets.py", line 372, in _help_tasklet_along
value = gen.send(val)
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/context.py", line 751, in get
pbs = entity._to_pb(set_key=False).SerializePartialToString()
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/model.py", line 3147, in _to_pb
prop._serialize(self, pb, projection=self._projection)
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/model.py", line 2379, in _serialize
projection=projection)
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/model.py", line 1405, in _serialize
values = self._get_base_value_unwrapped_as_list(entity)
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/model.py", line 1175, in _get_base_value_unwrapped_as_list
wrapped = self._get_base_value(entity)
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/model.py", line 1163, in _get_base_value
return self._apply_to_values(entity, self._opt_call_to_base_type)
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/model.py", line 1335, in _apply_to_values
value[:] = map(function, value)
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/model.py", line 1217, in _opt_call_to_base_type
value = _BaseValue(self._call_to_base_type(value))
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/model.py", line 734, in \__init__
assert b_val is not None, "Cannot wrap None"
AssertionError: Cannot wrap None
Проблема, похоже, прошла так же загадочно, как и она, но я все равно буду благодарен за любые предложения или советы, если она появится снова. – IDM
Нет, все еще там ... :( – IDM
Вы недавно изменили свой модельный класс? Также вы пробовали выбирать каждый из этих ключей с отдельными попаданиями?Проблема может быть связана не с get_multi, а с базовыми полномочиями –