Запуск сельдерея на производстве.Использование Django / Python в службе приложений Azure / linux - PullRequest
0 голосов
/ 13 мая 2019

У меня есть веб-сайт с API, на который клиенты могут отправлять свои API-звонки. Эти API имеют вложения в виде PDF-файлов или аналогичных файлов, которые хранятся в папке / MEDIA / Storage /. Приложение написано на Django.

API-вызов сохраняется в модели через DRF и сериализаторы. После того, как данные сохранены, некоторая логика сделана, электронные письма отправлены, поиск и хранение в таблицах данных и т. Д. Так как это занимает так много времени. В своем приложении я реализовал Celery (Azure Cache для Redis в качестве брокера), поэтому только первое хранилище в модели выполняется как обычно. Остальные нас выстроились через сельдерей.

Это хорошо работает на моей локальной машине (Mac OS). Но не на производстве (Azure / Linux).

Я попробовал git hooks, но не могу заставить его работать. Я попробовал какой-то терминал через ssh на лазурной ВМ, но не повезло ... Я посмотрел на Демонизацию, но это было сложно.

settings.py

CELERY_BROKER_URL = 'redis://:<password>=@<appname>.redis.cache.windows.net:6379/0'
CELERY_RESULT_BACKEND = 'django-db'
CELERY_CACHE_BACKEND = 'django-cache' 

celery.py

from __future__ import absolute_import, unicode_literals
import os
from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'hapionline.settings')

app = Celery('hapionline')
app.config_from_object('django.conf:settings', namespace="CELERY")
app.autodiscover_tasks()

@app.task(bind=True)
def debug_task(self):
    print('Request: {0!r}'.format(self.request))

views.py

class ProcSimpleList(generics.CreateAPIView): # Endast Create för att skapa en proc
    serializer_class = ProcSimpleSerializer
    permission_classes = (IsAdminOrReadOnly,)
    lookup_url_kwarg = 'proc_id'

    def perform_create(self, serializer):
        q = serializer.save()
        # Queue from starting worker. Queue created when starting cereal.
        transaction.apply_async(queue='high_priority', args=(q.proc_id, self.request.user.pk))

Локальный компьютер: все хорошо работает с помощью команды: сельдерей -гапильщик -l информация -Q high_priority

Производство: я не знаю, где запустить команду на производственном сервере? Если работник запускается на локальном компьютере, он запускает кэш Azure и вызывает API-интерфейс производственной среды. Но так как рабочий запускается локально, пути к файлам в API тоже являются некорректными и локальными, а не производственными. /User/../Media/ .. вместо /wwwroot/../media/..

Есть идеи? Как запустить рабочий на производственной виртуальной машине? Есть ли способ запустить сценарий запуска рабочего после мастера git push azure?

1 Ответ

0 голосов
/ 18 мая 2019

Я пропустил Azure и переместил приложение в Heroku. Это сработало как шарм.

...