это ошибка отладчика? или я дурак? - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть приложение python (flask -admin) в docker контейнере. и работает нормально. но в какой-то момент у меня возникла проблема, и я попытался отладить ее с помощью отладчика кода, и приложение даже не запустило

Это исключение от отладчика кода

Exception has occurred: SystemExit
1
  File "/opt/forwardbot/admin_panel/main.py", line 5, in <module>
    app.run(host='0.0.0.0',debug=True)

, и это в docker консоль

/usr/local/bin/python: No module named main

- вот мой запуск. json для присоединения к docker

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name" : "Python Attach Docker",
            "type" : "python",
            "request": "attach",
            "pathMappings": [
                {
                    // "localRoot": "${workspaceFolder}/forwardbot/admin_panel",
                    "localRoot": "/opt/forwardbot/admin_panel/",
                    "remoteRoot": "/app/"
                }
            ],
            "port": 5678,
            "host": "127.0.0.1",
            "justMyCode": true 
        }
    ]
}

docker -композитному файлу

version: "3.4"

services:
  db:
    image: postgres
    ports:
      - 5432:5432
    environment:
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=pswd
      - POSTGRES_DB=db
    volumes:
      - /data:/var/lib/postgresql/data
    networks:
      - backend


  admin_panel:
    image: admin_panel
    build:
      context: .
      dockerfile: Admin.Dockerfile
      target: debug
      # target: production
    ports:
      - 5000:5000
      - 5678:5678
    depends_on:
      - db
    volumes:
      - ./admin_panel:/app
    networks:
      - backend
    restart: always

networks: 
  backend:
    driver: "bridge"

Admin.Dockerfile

FROM python:alpine3.7 as base
ADD ./admin_panel /app
RUN apk update && apk add postgresql-dev gcc python3-dev musl-dev && pip install -r /app/requirements.txt

##################### DEBUGGING ##################### 

FROM base as debug
RUN pip install ptvsd
CMD python -m ptvsd --host 0.0.0.0 --port 5678 --wait /app/main.py

##################### PRODUCTION ##################### 

FROM base as production
CMD python -u /app/main.py

здесь - connections.py

from flask import Flask
from flask_admin import Admin
from flask_sqlalchemy import SQLAlchemy
from admin_index_view import MyViewIndex
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = "postgresql+psycopg2://123:123@123:123/123"
app.config['SECRET_KEY'] = 'SOMEhash'

db = SQLAlchemy(app)


admin = Admin(
    app,
    template_mode='bootstrap3',
    index_view=MyViewIndex(
        name="Главная страница",
        url="/",
        static_folder = 'static',
        endpoint='admin'
    ),
    name="Админ панель"
)

admin_views.py

from connections import db,admin
from my_database_schema import *
from flask_admin.contrib.sqla import ModelView
from flask_admin import BaseView, expose
from wtforms.fields import StringField
from jinja2 import Markup
from flask_admin.form import rules


class UserView(ModelView):
    can_delete = False # temprorary decision
    can_create = False
    can_view_details = True
    column_filters = ('forward_name','forwaded_messages','balance')
    column_labels = dict(
        forward_name = "Имя пользователя",
        balance = "Баланс",
        forwaded_messages = "Переслано сообщений",
        key_words = "Ключевые слова",
        anti_key_words = "Запретные слова",
        chat_request = "чат-запросы"
    )

    inline_models = (key_words,anti_key_words,chat_request,)


    def on_model_change(self, *args, **kwargs):
        args[0].data['key_words'].append(some_value)
        return super(UserView,self).on_model_change(*my_args,**kwargs)


class future_features(BaseView):  
    @expose('/')
    def index_2(self):
        return self.render('add_chats.html')




admin.add_view(UserView(forward_users,db.session,name="Пользователи"))
admin.add_view(future_features(name="Добавить чаты"))

Что может вызвать вышеуказанную проблему? (В отладчик снимков экрана показывает путь сервера к файлу ошибок, но он выполняется в контейнере. Может ли это вызвать проблему?)

...