Ответы пользователя по тегу Django
  • Как сделать категории?

    tumbler
    @tumbler Куратор тега Django
    бекенд-разработчик на python
    1) у Post должен быть ForeignKey на category
    2) Тогда вместо posts в шаблоне можно будет использовать c.post_set.all
    3) Получится что для каждой категории идет цикл по всем постам, у которых значение ForeignKey соответствует данной категории
    Ответ написан
    1 комментарий
  • Как инициировать «генерацию» других форматов видео в django-videokit?

    tumbler
    @tumbler Куратор тега Django
    бекенд-разработчик на python
    при запуске под *nix видео-файлы, «всосанные» через szVideoName, не имеют статуса на чтение и, соотвественно, не могут быть отданы клиенту веб-сервером

    Если веб-сервер запущен под пользователем web, то права -rw------- означают доступ на чтение и запись для этого самого пользователя, значит отдача веб-сервером возможно. Это легко проверить, попытавшись скачать этот файл curl-ом, например.
    У меня гипотеза, что как-то всетаки Celery файл подхватывает и что-то с ним делает (или пытается). Но вот что?

    Celery делает ровно то, что указано в теле соответствующих задач, описанных в проекте django-videokit. Если любопытно, надо искать в исходниках "батарейки".
    Но вот создается это процесс, и если создается, то работает ли он?

    Во-первых, стоит почитать логи celery, там наверняка будут какие-то ошибки запуска (например, отсутствие ffmpeg на машине :-) ). Во-вторых, ffmpeg на любую ошибку ругается кодом ответа, отличным от нуля. Если django-videokit этот код ответа не проверяет - это плохая "батарейка".

    это мой первый опыт использования Celery и как там должна происходить инициализация очередей, выполнение заданий и тому подобное -- не понимаю

    Это очень обширный вопрос, для ответа на который нужно объяснить основы протокола AMQP, который реализует RabbitMQ, половину документации Celery "и тому подобное".
    Если кратко, то схема следующая:
    1. при вызове celery_task.delay() отправляется сообщение в RabbitMQ
    2. RabbitMQ маршрутизирует сообщение в нужную очередь, в соответствии с настройками celery
    3. celery берет задачу в обработку, выполняет код, являющийся телом задачи
    4. после выполнения задачи, результат (return) записывается в redis
    5. код, отправивший задачу, может подождать ее завершения, вызвав async_result.get, который внутри периодически опрашивает redis, не появился ли там результат обработки задачи.
    что предварительно надо установить RabbitMQ. Но в requirements.txt примера указан в числе прочего еще и redis==2.10.5.

    Традиционно, celery использует RabbitMQ для передачи задач и Redis для хранения результатов их выполнения.

    Мне не понятно как и кто тогда управляет очередями

    Очередями (их настройкой) заведует Celery, объявляя их при старте worker-ов.
    Ответ написан