Flask и Gunicorn по ошибке импорта Heroku

Привет У меня есть небольшое приложение Flask, которое использует MongoEngine.

моя структура проекта:

/myproject -application.py -config.py /my_app -models.py -views.py 

my application.py:

 #!/usr/bin/env python from flask.ext.mongoengine import MongoEngine from config import app import os app.debug = True # get config settings if __name__ == '__main__': app.config.from_object('config') else: app.config.from_object('heroku_config') # wrap app in mongengine db = MongoEngine(app) if __name__ == '__main__': # Bind to PORT if defined, otherwise default to 5000. port = int(os.environ.get('PORT', 5000)) app.run(host='0.0.0.0', port=port) 

my models.py:

 from application import db from flask import url_for # declare model classes ... 

Я развертываю на героку. Если мой Procfile читает:

  web: python application.py 

Он работает нормально. Когда я пытаюсь переключиться на Гуникорн:

  web: gunicorn application:app 

Когда я запускаю пушки, он жалуется на ошибку импорта:

 ImportError: cannot import name db 

Почему эта проблема сейчас? Я предполагаю, что это проблема пути, но я не понимаю, почему так.

Любая помощь приветствуется.

One Solution collect form web for “Flask и Gunicorn по ошибке импорта Heroku”

Я предполагаю, что вы регистрируете чертежи или что-то подобное в application.py, что, в свою очередь, импортирует модель, правильно?
Вы не представили файл представления или то, как вы используете файл представления, и если моя догадка неверна, мой ответ ниже также не будет.

Если мое предположение верно, это, вероятно, связано с циклическим импортом. Вы можете создать файл db.py, содержащий эти строки (перейдите из application.py):

 from flask.ext.mongoengine import MongoEngine db = MongoEngine(app) 

а затем импортируйте этот файл в свои модели ( from db import db ).
Это означает, что поток будет выглядеть примерно так: db -> model -> view -> app вместо app (db) -> model -> view -> app .

Циркулярный импорт создает всевозможные раздражающие проблемы, старайтесь избегать их, когда это возможно.

  • Django + MongoDB
  • Mongoengine: ConnectionError: вы не определили соединение по умолчанию
  • PyMongo против MongoEngine для Django
  • Как атомные операции монгоингина
  • InvalidDocument: Невозможно закодировать объект: <Пользователь: объект пользователя> ReferenceField с MongoEngine
  • Коллекция переключателей в mongoengine для поиска
  • Обновление списка встроенных документов в mongoengine
  • Mongoengine, восстанавливая только некоторые из MapField
  • Python - лучший язык программирования в мире.