Процесс приложения не может быть использован после "... - невозможно продолжить инициализацию других картографов". - PullRequest
0 голосов
/ 01 мая 2018

Я не уверен, должен ли я рассматривать это как ошибку или просто что-то, что мне нужно обойти.

У меня есть приложение Flask, которое обслуживает как веб-запросы, так и запускает потоки для серверных заданий. У меня только что был результат работы бэкэнда в вышеупомянутой ошибке при подключении к БД, из которой я периодически получаю данные. Таблица, которую он не смог отобразить, - это даже не тот запрос, который я запрашиваю в этой базе данных, но его неспособность отобразить не только привела к сбою этого серверного задания, но и переводит SQLAlchemy в состояние, в котором он не может отобразить НИЧЕГО еще с этой точки - - в том числе для обслуживания веб-запросов, которые даже не обращаются к этой базе данных!

Это тоже была просто случайная проблема. Я перезапустил свое приложение, и таблица, которая не смогла отобразить, просто отлично сопоставилась.

Есть ли способ предотвратить проникновение SQLAlchemy в это "НЕ БУДЕТ КАРТУ!" указать в приложении? Если бы оно содержалось в отдельном соединении, оно не было бы таким уж большим делом, но, похоже, сохраняло бы его в глобальном пространстве и, таким образом, полностью разрывало приложение с момента сбоя.

Edit: Это наконец придумано снова. Вот полный стек:

Traceback (most recent call last):
  File "/home/dmittner/loci2/app/jobs.py", line 506, in start
    result = self.callable(self,**self.parameters)
  File "/home/dmittner/loci2/app/jobs.py", line 467, in job_test
    breakout_property = False
  File "/home/dmittner/loci2/app/api/mod_system/services.py", line 1166, in get_usage
    threshold = summary_threshold
  File "/home/dmittner/loci2/app/api/mod_system/services.py", line 2243, in _get_usage_summary
    'id': result2.regional_region_id,
  File "/usr/local/lib/python3.4/dist-packages/sqlalchemy/orm/attributes.py", line 242, in __get__
    return self.impl.get(instance_state(instance), dict_)
  File "/usr/local/lib/python3.4/dist-packages/sqlalchemy/orm/attributes.py", line 598, in get
    value = state._load_expired(state, passive)
  File "/usr/local/lib/python3.4/dist-packages/sqlalchemy/orm/state.py", line 608, in _load_expired
    self.manager.deferred_scalar_loader(self, toload)
  File "/usr/local/lib/python3.4/dist-packages/sqlalchemy/orm/loading.py", line 844, in load_scalar_attributes
    session.query(mapper),
  File "/usr/local/lib/python3.4/dist-packages/sqlalchemy/orm/session.py", line 1393, in query
    return self._query_cls(entities, self, **kwargs)
  File "/usr/local/lib/python3.4/dist-packages/sqlalchemy/orm/query.py", line 140, in __init__
    self._set_entities(entities)
  File "/usr/local/lib/python3.4/dist-packages/sqlalchemy/orm/query.py", line 151, in _set_entities
    self._set_entity_selectables(self._entities)
  File "/usr/local/lib/python3.4/dist-packages/sqlalchemy/orm/query.py", line 181, in _set_entity_selectables
    ent.setup_entity(*d[entity])
  File "/usr/local/lib/python3.4/dist-packages/sqlalchemy/orm/query.py", line 3619, in setup_entity
    self._with_polymorphic = ext_info.with_polymorphic_mappers
  File "/usr/local/lib/python3.4/dist-packages/sqlalchemy/util/langhelpers.py", line 767, in __get__
    obj.__dict__[self.__name__] = result = self.fget(obj)
  File "/usr/local/lib/python3.4/dist-packages/sqlalchemy/orm/mapper.py", line 1994, in _with_polymorphic_mappers
    configure_mappers()
  File "/usr/local/lib/python3.4/dist-packages/sqlalchemy/orm/mapper.py", line 3013, in configure_mappers
    mapper._post_configure_properties()
  File "/usr/local/lib/python3.4/dist-packages/sqlalchemy/orm/mapper.py", line 1811, in _post_configure_properties
    prop.init()
  File "/usr/local/lib/python3.4/dist-packages/sqlalchemy/orm/interfaces.py", line 184, in init
    self.do_init()
  File "/usr/local/lib/python3.4/dist-packages/sqlalchemy/orm/relationships.py", line 1655, in do_init
    self._process_dependent_arguments()
  File "/usr/local/lib/python3.4/dist-packages/sqlalchemy/orm/relationships.py", line 1712, in _process_dependent_arguments
    self.target = self.mapper.mapped_table
  File "/usr/local/lib/python3.4/dist-packages/sqlalchemy/util/langhelpers.py", line 767, in __get__
    obj.__dict__[self.__name__] = result = self.fget(obj)
  File "/usr/local/lib/python3.4/dist-packages/sqlalchemy/orm/relationships.py", line 1634, in mapper
    configure=False)
  File "/usr/local/lib/python3.4/dist-packages/sqlalchemy/orm/base.py", line 426, in class_mapper
    raise exc.UnmappedClassError(class_)
sqlalchemy.orm.exc.UnmappedClassError: Class 'sqlalchemy.ext.automap.geo_state_map_data' is not mapped

Возможно, стоит отметить, что таблица geo_state - это даже не таблица, которую я использую, но, в любом случае, с ней работает автопроизводитель. И с этого момента я получаю исходное сообщение, не позволяющее процессу успешно устанавливать новые подключения.

При просмотре кода SQLAlchemy мапперы хранятся в глобальной переменной пространства _mapper_registry, и как только любой маппер в реестре выдаст ошибку, любая попытка сконфигурировать новый маппер потерпит неудачу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...