• Как обновить docker-compose на prod-сервере, ничего не поломав?

    @Sazoks Автор вопроса
    Ну, если бы я знал) Так вот получилось. Надеюсь, в скором времени все обновят, а то на старой версии докера сидеть не охота.
  • Как настроить логирование Django + Celery с помощью RotatingFileHandler?

    @Sazoks Автор вопроса
    Dimonchik, понял, спасибо Вам)
    Если несложно, взгляните на мои файлы:

    celery.py

    import os
    import logging
    from logging import handlers
    from celery import Celery
    from celery.signals import setup_logging
    from django.conf import settings
    
    
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'company.settings')
    
    # Создание асинхронной очереди и загрузка конфигурации.
    app = Celery('company')
    app.config_from_object('django.conf:settings', namespace='CELERY')
    
    
    # Настройка логирования для Celery.
    @setup_logging.connect
    def config_loggers(*args, **kwargs) -> None:
        logger = logging.getLogger('celery')
        logger.setLevel(logging.INFO)
        formatter = logging.Formatter(
            fmt='[{levelname}]-[{asctime}]-[{module}]-[{process:d}]-[{thread:d}]: {message}',
            style='{',
        )
        handler = handlers.RotatingFileHandler(
            filename=settings.LOGS_DIR / 'celery/worker.log',
            maxBytes=300,
            backupCount=5,
        )
        handler.setFormatter(formatter)
        logger.addHandler(handler)
    
    
    # Поиск всех тасок.
    app.autodiscover_tasks()


    Это все, что есть в настройках для Celery. Воркер запускаю командой:
    celery -A company worker --loglevel=info --concurrency=1 -P eventlet


    И вот это все приводит к тому, что каким-то образом создается (если предварительно его удалить) файл логов для django! Хотя эта информацию есть только в переменной LOGGING в файле settings.py.

    В чем может быть дело?
  • Как настроить логирование Django + Celery с помощью RotatingFileHandler?

    @Sazoks Автор вопроса
    Спасибо за ответ! Я полностью с Вами согласен, но я наткнулся на еще одну проблему. В моем варианте мне удалось сделать так, чтобы процесс django не захватывал файл логов воркера. Однако даже если не запускать django, а запустить только воркер, воркер захватывает файл логов, в который пишет django! И виной этому эта строчка:
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'company.settings')


    Однако, как Вы наверняка знаете, благодаря ей можно настроить celery из файла settings.py (брокеры, бэкенды, другие настроение, не связанные с логами, те же таски..). И вот когда я убирал эту строку, воркер больше не захватывал файл логов django, но также не мог найти ни одну таску....

    Сейчас я вижу один единственный выход - полностью разделить celery и django. Но в таком случае нужно как-то научить celery находить все таски. Я прописывал..
    # Поиск всех тасок.
    app.autodiscover_tasks(['company.application_handler'])

    ..но воркер не находил ни одной таске, хотя в company.application_handler лежит файл tasks.py.
  • Как сделать правильную сериализацию моделей?

    @Sazoks Автор вопроса
    Dr. Bacon, спасибо за комментарий! Сейчас дополню вопрос.
  • Наилучшая структура Django-проекта?

    @Sazoks Автор вопроса
    Хорошо, большое спасибо за ресурс :)
    Обязательно посмотрю.
  • Наилучшая структура Django-проекта?

    @Sazoks Автор вопроса
    Vitaly Karasik, да, года 2 назад помню еще вменяемые вопросы были (хотя тогда я был одним из тех, кто сам такие глупые вопросы задавал), а сейчас что-то совсем все тухло.
  • Наилучшая структура Django-проекта?

    @Sazoks Автор вопроса
    Большое спасибо Вам за такой подробный ответ. Я уж думал, на просторах бывшего "тостера" таких не осталось...

    Из Вашего ответа я понял одно - вопрос структуры Django-проектов действительно ситуативный, и все решается от проекта к проекту :) В этом плане Вы прибавили мне смелости и уверенности в выборе структуры проекта, спасибо!

    У меня есть еще несколько вопросов:
    1. Насчет models. Неужели Вам в каждом своем проекте удается добиться 100% модульности отдельных приложений без какой-либо связи? Лично на моем скромном опыте как бы я не пытался минимизировать зависимости между приложениями (в виде импорта моделей одного приложения в другое) всегда они есть. Разумеется, только там, где это уместно. Но по-моему это нормальная практика, или я ошибаюсь?
    2. Насчет template и static. Но ведь бывает же такое, что есть какие-то общие шаблоны и статика, которые используются. Где тогда их хранить?
    3. Насчет абстракций. Согласен, в apps, если приложение одно, нет смысла. Но даже если создавать приложения на одном уровне с пакетом конфигурации проекта, тогда почему мы должны тот же media создавать на том же уровне? Это ведь не приложение. Это просто папка с медиа-ресурсами. Или можно вынести и это в папку common?


    В общем-то, если вопрос структуры проектов такой ситуативный, то видать тут мне поможет только опыт и насмотренность на другие проекты, т.к. в свои 19 опыта у меня кот наплакал :)
  • Django ORM | Ошибка в применении SingletonModel?

    @Sazoks Автор вопроса
    Спасибо за ответ!
    Насчет Meta - сглупил. После публикации вопроса сразу же удалил у себя, но вопрос поправить забыл.
    А насчет удаления всех объектов, я руководствовался мыслью, что в таблице настроек сайта могут оказаться другие записи, и чтобы не было форс-мажорных обстоятельств, я решил наверняка удалять все другие записи, если такие найдутся.
    Я новичок в Django, поэтому буду крайне признателен вам, если вы немного направите мое мышление в нужное русло)
  • Django Middleware | Как бороться с неявностью при добавлении объектов в контекст шаблонов через middleware?

    @Sazoks Автор вопроса
    Сергей Горностаев, понял! Спасибо вам большое) На самом деле то ли я что-то не то делаю, то ли реально в обучении не хватает рядом более опытных людей.
  • Django Middleware | Как бороться с неявностью при добавлении объектов в контекст шаблонов через middleware?

    @Sazoks Автор вопроса
    Да, я и использовал это в контекстном процессоре, просто все равно ж неочевдно как-то получается. Взглянув на вьюшку, представленную в вопросе, подумаешь сразу: "Так, ну наверное она должна добавлять в шаблон список всех услуг, но где?". На самом деле мне просто нужен совет более опытных людей и все)
    Может, я ваще вижу проблему там, где ее нет.
  • Как работает GitLab Runner?

    @Sazoks Автор вопроса
    mureevms, спасибо за комментарий, уже разобрался) Щас напишу ответ.
  • Пример развертывания проектов (CI/CD)?

    @Sazoks Автор вопроса
    Хммм, умная мысль! Спасибо, буду разбираться тогда и с этим.
  • Как установить старую версию Flask?

    @Sazoks Автор вопроса
    Оу, спасибо, не знал про такой флаг.
  • Как отключить конкретного клиента от сервера?

    @Sazoks Автор вопроса
    Алан Гибизов, не знаю, наверняка среди них есть знающие люди.
    Может подскажите принципы выбора правильных тегов? Вместо саркастических вопросов. Я вот действительно, видимо, не знаю их.
  • Как написать функцию добавления/удаления элемента в массив?

    @Sazoks Автор вопроса
    Wataru, большое спасибо!)
    Я передавал просто адрес в ф-ию. В вызове fun(&ptr);, в ф-ии void fun(int *ptr);
    Ну и просто имея в ptr внутри ф-ии адрес исходного указателя, пытался что-то делать, но не получалось. Хотя адреса совпадали...
    В общем, спасибо большое))
  • Как удалить объект потока при его завершении?

    @Sazoks Автор вопроса
    Дмитрий, понял, спасибо.
    А Lock нужен, потому что я удаляю элемент из списков __event_threads и __list_rooms. Это данные общие, поэтому во избежание проблем решил ограничить доступ. Т.к. тут по индексу же идет. Может получится так, что один поток удаляет элемент по i = 5, но в это же время другой поток уже удалил элемент под i = 3, и получается i = 5 удалит уже не тот поток, что нужно. Вот и подумал неплохо было бы от этого избавиться.
  • Как удалить объект потока при его завершении?

    @Sazoks Автор вопроса
    Я ошибся, оказывается, запускал ^_^"
    И все на удивление работает как надо и без багов.

    Интересный вопрос... Я подумал, что было бы неплохо иметь контроль над потоком в главном потоке. У меня каждый поток - трансляция определенного события по комнатам юзерам. Каждое событие содержит в себе игру (змейка, тетрис, кораблики) и юзеров, которые участвуют в этом событии.
    Поэтому я подумал, что запускать поток и не сохранять его в главном потоке было бы глупо. К тому же мне надо дожидаться завершения всех потоков через Thread.join().

    Поправьте, если я заблуждаюсь?
  • Что делать, если удалил ветку без удаления коммита?

    @Sazoks Автор вопроса
    Ромзес Панагиотис, человек запушил туда виртуальное окружение и все либы в проекте)
  • Ресурсы для изучения асинхронности в Python?

    @Sazoks Автор вопроса
    Алан Гибизов, честно говоря, не понимаю я этих правил всех... Просто стараюсь быть вежливым (это к предложению о правке). А насчет вопроса согласен. Возможно, можно было более грамотно составить его, но я постарался максимально обобщить проблему.