У меня есть веб-сайт с 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?