Flask/SQLAlchemy/Docker Есть ли лучший способ справиться с тем, что я считаю круговой зависимостью? Полный проект github включен

У меня возникла проблема, когда я не могу заставить свой объект БД работать на разных маршрутах в моем приложении.

Сегодня я потратил на это добрых 6 часов и попробовал различные варианты, включая шаблоны appfactory, загрузку расширений, чертежи и многое другое, и независимо от того, какой подход я выберу, я просто запутался.

Я хочу сохранить шаблон чертежа, который у меня есть, это ключ, но на базовом уровне я просто не могу загрузить .db.

Это полная ошибка:

$ sudo docker-compose up --build
WARNING: The UID variable is not set. Defaulting to a blank string.
Building website
Step 1/10 : FROM python:3.7.2-alpine
 ---> bb1ccaa5880c
Step 2/10 : MAINTAINER (info to live here)
 ---> Using cache
 ---> c86eafc23e13
Step 3/10 : ENV INSTALL_PATH /logrr
 ---> Using cache
 ---> 18de4002edc2
Step 4/10 : RUN mkdir -p $INSTALL_PATH
 ---> Using cache
 ---> 78996ea3714d
Step 5/10 : RUN pip install --upgrade pip
 ---> Using cache
 ---> bf253a9bfe18
Step 6/10 : WORKDIR $INSTALL_PATH
 ---> Using cache
 ---> 04e1a0092af0
Step 7/10 : COPY requirements.txt requirements.txt
 ---> Using cache
 ---> e96a1b830b07
Step 8/10 : RUN pip install -r requirements.txt
 ---> Using cache
 ---> 114d0dcd7eb0
Step 9/10 : COPY . .
 ---> cdc705c36e0d
Step 10/10 : CMD gunicorn -b 0.0.0.0:9000 --access-logfile - "logrr.app:create_app()"
 ---> Running in dbbcb2fa0541
Removing intermediate container dbbcb2fa0541
 ---> 69b7e8cba951
Successfully built 69b7e8cba951
Successfully tagged logrr_website:latest
Recreating logrr_website_1 ... done
Attaching to logrr_website_1
website_1  | Traceback (most recent call last):
website_1  |   File "/usr/local/bin/gunicorn", line 10, in <module>
website_1  |     sys.exit(run())
website_1  |   File "/usr/local/lib/python3.7/site-packages/gunicorn/app/wsgiapp.py", line 61, in run
website_1  |     WSGIApplication("%(prog)s [OPTIONS] [APP_MODULE]").run()
website_1  |   File "/usr/local/lib/python3.7/site-packages/gunicorn/app/base.py", line 223, in run
website_1  |     super(Application, self).run()
website_1  |   File "/usr/local/lib/python3.7/site-packages/gunicorn/app/base.py", line 72, in run
website_1  |     Arbiter(self).run()
website_1  |   File "/usr/local/lib/python3.7/site-packages/gunicorn/arbiter.py", line 60, in __init__
website_1  |     self.setup(app)
website_1  |   File "/usr/local/lib/python3.7/site-packages/gunicorn/arbiter.py", line 120, in setup
website_1  |     self.app.wsgi()
website_1  |   File "/usr/local/lib/python3.7/site-packages/gunicorn/app/base.py", line 67, in wsgi
website_1  |     self.callable = self.load()
website_1  |   File "/usr/local/lib/python3.7/site-packages/gunicorn/app/wsgiapp.py", line 52, in load
website_1  |     return self.load_wsgiapp()
website_1  |   File "/usr/local/lib/python3.7/site-packages/gunicorn/app/wsgiapp.py", line 41, in load_wsgiapp
website_1  |     return util.import_app(self.app_uri)
website_1  |   File "/usr/local/lib/python3.7/site-packages/gunicorn/util.py", line 350, in import_app
website_1  |     __import__(module)
website_1  |   File "/logrr/logrr/app.py", line 3, in <module>
website_1  |     from logrr.blueprints.register import register
website_1  |   File "/logrr/logrr/blueprints/register/__init__.py", line 1, in <module>
website_1  |     from logrr.blueprints.register.views import register
website_1  |   File "/logrr/logrr/blueprints/register/views.py", line 4, in <module>
website_1  |     from logrr.models import User, Post, Org
website_1  |   File "/logrr/logrr/models.py", line 2, in <module>
website_1  |     from logrr.app import db
website_1  | ImportError: cannot import name 'db' from 'logrr.app' (/logrr/logrr/app.py)
logrr_website_1 exited with code 1

У меня есть полный код, готовый для запуска через docker-compose: https://github.com/therealrobster/bdIssue

Вы можете запустить его через стандартный sudo docker-compose up --build В настоящее время он установлен на localhost:9000.

По какой-то причине, когда я пытаюсь получить доступ к моделям БД, я получаю такие ошибки, как ImportError: cannot import name 'db' from 'logrr.app' (/logrr/logrr/app.py)

Может ли кто-нибудь посмотреть код и сказать мне, что я делаю неправильно, пожалуйста? 6 часов биться головой об стол, и я на грани смерти.

Спасибо

Пожалуйста, разместите достаточно кода, чтобы продемонстрировать проблему здесь, а не на каком-то внешнем сайте. Это гарантирует, что люди, которым может быть полезно увидеть эту проблему и (надеюсь) ее решение, не пострадают от устаревшей ссылки.

Dave W. Smith 30.05.2019 06:42

Думаю, я публикую всю структуру кода на github, так как здесь было бы трудно увидеть ее в блоках кода. Я думаю, что есть проблема с циклической ссылкой, но я немного новичок в этом, чтобы быть уверенным. Показ полной структуры на github позволит людям увидеть все целиком.

robster 30.05.2019 07:01

Вы можете добавить полную трассировку стека?

Tech at The Sparks Foundation 30.05.2019 09:53

@TechatTheSparksFoundation, спасибо, я добавлю это ниже в другом комментарии, где есть место. (EDIT) Добавлено в OP

robster 30.05.2019 10:15

@robster не добавляйте комментарии. редактировать свой вопрос и добавьте его туда

Tech at The Sparks Foundation 30.05.2019 10:17

проблема в вашем models.py, он импортирует db из logrr.app, но db присутствует в logrr.extensions.

Tech at The Sparks Foundation 30.05.2019 10:52

@TechatTheSparksFoundation мы нашли его одновременно! Спасибо. Я очень ценю, что вы изучаете это. ВЕСЬ день я провел (включенный и выключенный), и это было так просто. Очень ценю вашу помощь. Если вы ответите, я могу отметить ваш ответ как правильный, если хотите?

robster 30.05.2019 10:56

Насколько я понимаю, когда я вызывал расширения из app.py, они будут доступны из app.py. я ошибалась конечно

robster 30.05.2019 10:57
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
0
8
433
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

проблема в вашем models.py он импортирует db из logrr.app но db присутствует в logrr.extensions

Другие вопросы по теме