Flask / SQLAlchemy / Docker Есть ли лучший способ справиться с круговой зависимостью? Полный проект GitHub включен - PullRequest
0 голосов
/ 30 мая 2019

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

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

Я хочу сохранить шаблон плана, который у меня есть, это ключевой момент, но на базовом уровне я просто могу »получить .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 часов стуча головой по столу, и я нахожусь на своем конце.

Спасибо

1 Ответ

1 голос

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

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