Приложение Flask не работает после обновления BSON в Heroku - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть приложение Flask, которое использует mongoengine и работает на Heroku, поэтому я использую пакет bson и после его обновления с 0.5.6 до 0.5.7 я начал получать следующее сообщение об ошибке:

[2018-11-23 05:56:43 +0000] [39] [INFO] Worker exiting (pid: 39)
[2018-11-23 05:56:43 +0000] [40] [ERROR] Exception in worker process
Traceback (most recent call last):
  File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/arbiter.py", line 583, in spawn_worker
    worker.init_process()
  File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/workers/base.py", line 129, in init_process
    self.load_wsgi()
  File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/workers/base.py", line 138, in load_wsgi
    self.wsgi = self.app.wsgi()
  File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/base.py", line 67, in wsgi
    self.callable = self.load()
  File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 52, in load
    return self.load_wsgiapp()
  File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 41, in load_wsgiapp
    return util.import_app(self.app_uri)
  File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/util.py", line 350, in import_app
    __import__(module)
  File "/app/slots_tracker_server/__init__.py", line 5, in <module>
    from mongoengine import connect
  File "/app/.heroku/python/lib/python3.6/site-packages/mongoengine/__init__.py", line 2, in <module>
    from mongoengine import connection
  File "/app/.heroku/python/lib/python3.6/site-packages/mongoengine/connection.py", line 1, in <module>
    from pymongo import MongoClient, ReadPreference, uri_parser
  File "/app/.heroku/python/lib/python3.6/site-packages/pymongo/__init__.py", line 77, in <module>
    from pymongo.collection import ReturnDocument
  File "/app/.heroku/python/lib/python3.6/site-packages/pymongo/collection.py", line 20, in <module>
    from bson.code import Code
  File "/app/.heroku/python/lib/python3.6/site-packages/bson/code.py", line 18, in <module>
    from bson.py3compat import abc, string_type, PY3, text_type
ImportError: cannot import name 'abc'

Эта ошибка появляется, когда я перезагружаю свой сервер, после чего я не вижу ошибок в журнале, но не могу получить доступ к приложению.Я использую ту же конфигурацию в Travis-CI, но там я не вижу никаких проблем.Любая идея о том, как я могу это исправить?

Это вывод pip freeze на моем сервере:

blinker==1.4
bson==0.5.7
CacheControl==0.12.5
cachetools==3.0.0
certifi==2018.10.15
chardet==3.0.4
Click==7.0
dateutils==0.6.6
firebase-admin==2.13.0
Flask==1.0.2
Flask-Cors==3.0.7
google-api-core==1.5.2
google-auth==1.6.0
google-cloud-core==0.28.1
google-cloud-firestore==0.30.0
google-cloud-storage==1.13.0
google-resumable-media==0.3.1
googleapis-common-protos==1.5.5
grpcio==1.16.1
gspread==3.0.1
gunicorn==19.9.0
httplib2==0.11.3
idna==2.7
itsdangerous==1.1.0
Jinja2==2.10
MarkupSafe==1.1.0
mongoengine==0.16.1
msgpack==0.5.6
numpy==1.15.4
oauth2client==4.1.3
pandas==0.23.4
protobuf==3.6.1
pyasn1==0.4.4
pyasn1-modules==0.2.2
pyfcm==1.4.5
pymongo==3.7.2
python-dateutil==2.7.5
python-http-client==3.1.0
pytz==2018.7
raven==6.9.0
requests==2.20.1
requests-toolbelt==0.8.0
rsa==4.0
sendgrid==5.6.0
six==1.11.0
urllib3==1.24.1
Werkzeug==0.14.1

Обратите внимание, что pymongo>=2.7.1 устанавливается как зависимость mongoengine

Обновление: После удаления bson и добавления pymongo==3.7.2 в файл заявок, я получил следующую ошибку:

Traceback (most recent call last):
   File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/arbiter.py", line 583, in spawn_worker
     worker.init_process()
   File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/workers/base.py", line 129, in init_process
     self.load_wsgi()
   File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/workers/base.py", line 138, in load_wsgi
     self.wsgi = self.app.wsgi()
   File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/base.py", line 67, in wsgi
     self.callable = self.load()
   File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 52, in load
     return self.load_wsgiapp()
   File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 41, in load_wsgiapp
     return util.import_app(self.app_uri)
   File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/util.py", line 350, in import_app
     __import__(module)
   File "/app/slots_tracker_server/__init__.py", line 5, in <module>
     from mongoengine import connect
   File "/app/.heroku/python/lib/python3.6/site-packages/mongoengine/__init__.py", line 2, in <module>
     from mongoengine import connection
   File "/app/.heroku/python/lib/python3.6/site-packages/mongoengine/connection.py", line 1, in <module>
     from pymongo import MongoClient, ReadPreference, uri_parser
   File "/app/.heroku/python/lib/python3.6/site-packages/pymongo/__init__.py", line 77, in <module>
     from pymongo.collection import ReturnDocument
   File "/app/.heroku/python/lib/python3.6/site-packages/pymongo/collection.py", line 20, in <module>
     from bson.code import Code
   File "/app/.heroku/python/lib/python3.6/site-packages/bson/code.py", line 18, in <module>
     from bson.py3compat import abc, string_type, PY3, text_type
 ModuleNotFoundError: No module named 'bson.py3compat'

1 Ответ

0 голосов
/ 26 ноября 2018

pymongo> = 2.7.1 директива перезаписывает вашу установку bson

из https://github.com/mongodb/mongo-python-driver

Не устанавливайте пакет "bson" из pypi.PyMongo поставляется с собственным пакетом bson;Выполнение команды "easy_install bson" устанавливает сторонний пакет, который несовместим с PyMongo.

, если вы действительно хотите использовать сторонний bson, вам нужно

  1. pip uninstall bson (удаляет перезаписанный bson, который попал в пакет pymongo)
  2. pip install bson (переустанавливает пакет py-bson)

или вы можете исправить установку pymongo, чтобы удалитьстрока collection.abc (очевидно, вам это не нужно?), но спор с производственным упакованным кодом сомнителен.

модуль pymongo https://github.com/mongodb/mongo-python-driver/blob/master/bson/py3compat.py#L22-L25

модуль py-bson, который вы пытаетесь использовать.https://github.com/py-bson/bson/blob/master/bson/py3compat.py#L22-L24

...