Приложение Django на docker. Проблема с travis и logger

Давным-давно я добавил модуль логирования в свое приложение django. Мое приложение работает локально нормально. Проблема заключается в Travis CI. Travis не справляется со сборкой, выдавая ошибку FileNotFoundError: [Errno 2] Нет такого файла или каталога: '/electronic_shop/_logs/data.log': Travis building. Как я понимаю, у Travis возникла проблема с поиском файла _logs/data.log. Сначала я думал, что достаточно добавить новую команду в мой файл докера (mkdir /electronic_shop/_logs), но я ошибся. Итак, вопрос в том, что я могу сделать, чтобы заставить Travis запустить мой образ? Docker создает папку _log внутри моего образа, поэтому ошибки быть не должно. Есть идеи? Должен ли я создавать файлы, необходимые для логгера, вручную (в файле докера)?

Вот мой файл docker:

FROM python:3.10-alpine

EXPOSE 8000
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
    
COPY ./requirements.txt /requirements.txt

RUN apk add --update --no-cache postgresql-client jpeg-dev
RUN apk add --update --no-cache --virtual .tmp-build-deps \
    gcc libc-dev linux-headers postgresql-dev musl-dev zlib zlib-dev
RUN pip install -r /requirements.txt
RUN apk del .tmp-build-deps

RUN mkdir /electronic_shop
RUN mkdir /electronic_shop/_logs
WORKDIR /electronic_shop
COPY . /electronic_shop

RUN mkdir -p /vol/web/media
RUN mkdir -p /vol/web/static

RUN adduser -u 5678 --disabled-password --gecos "" user && chown -R user /electronic_shop
RUN chown -R user:user /vol/
RUN chmod -R 755 /vol/web
USER user

CMD ["gunicorn", "--bind", "0.0.0.0:8000", "electronic_shop.wsgi"]

Трэвис:

language: python
python:
  - "3.9"

services:
  - docker

before_script: pip install docker-compose

script:
- docker-compose run electronicshop sh -c "python manage.py wait_for_db && python manage.py test"

settings.py с looger:

def logging_structure(logfile_name):
    return {
        "version": 1,
        "disable_existing_loggers": False,
        "formatters": {
            "verbose": {
                "format": "[%(asctime)s] %(levelname)s [%(pathname)s:%(lineno)s] %(message)s",
                "datefmt": "%d/%b/%Y %H:%M:%S",
            },
            "simple": {"format": "%(levelname)s %(message)s"},
        },
        "handlers": {
            "profile": {
                "level": "DEBUG",
                "class": "logging.FileHandler",
                "filename": os.path.join(logfile_name, "profiles.log"),
                "formatter": "verbose",
            },
            "data": {
                "level": "DEBUG",
                "class": "logging.FileHandler",
                "filename": os.path.join(logfile_name, "data.log"),
                "formatter": "verbose",
            },
            "django": {
                "level": "DEBUG",
                "class": "logging.FileHandler",
                "filename": os.path.join(logfile_name, "django.log"),
                "formatter": "verbose",
            },
            "project": {
                "level": "DEBUG",
                "class": "logging.FileHandler",
                "filename": os.path.join(logfile_name, "project.log"),
                "formatter": "verbose",
            },
            "route_updater": {
                "level": "DEBUG",
                "class": "logging.FileHandler",
                "filename": os.path.join(logfile_name, "route.updater.log"),
                "formatter": "verbose",
            },
            "console": {
                "level": "DEBUG",
                "class": "logging.StreamHandler",
                "formatter": "simple",
            },
        },
        "loggers": {
            "profiles": {
                "handlers": ["console", "profile"],
                "level": "DEBUG",
            },
            "django": {
                "handlers": ["django"],
                "propagate": True,
                "level": "ERROR",
            },
            "project": {
                "handlers": ["project"],
                "level": "DEBUG",
            },
            "route_updater": {
                "handlers": ["console", "route_updater"],
                "level": "DEBUG",
            },
        },
    }


LOGGING_CONFIG = None
LOGGING = logging_structure("_logs")
logging.config.dictConfig(LOGGING)

logger = logging.getLogger(__name__)
Вернуться на верх