簡體   English   中英

開始生產芹菜工人。 在Azure / linux應用服務上使用Django / Python

[英]Start Celery worker on production. Using Django/Python on Azure/linux app service

我有一個帶有API的網站,客戶可以發送他們的API后呼叫。 這些API具有PDF或類似形式的附件,這些附件存儲在文件夾/ MEDIA / Storage /中。 該應用程序是用Django編寫的。

API調用通過DRF和序列化程序存儲在模型中。 在存儲數據之后,完成一些邏輯,發送電子郵件,查找和存儲在數據表等中。因為這需要花費很多時間。 我在我的應用程序中實現了Celery(Azure Cache for Redis as Broker),因此只有模型中的第一個存儲像往常一樣完成。 其余的我們排隊通過芹菜。

這在我的本地機器(mac os)上運行良好。 但不是生產(Azure / Linux)。

我已經嘗試過git hooks,但我無法讓它工作。 我已經在天藍色虛擬機上通過ssh嘗試了一些終端,但沒有運氣......我已經研究過Daemonization但它很復雜。

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))

本地機器:一切都適用於命令:celery -A hapionline worker -l info -Q high_priority

制作:我不知道在生產服務器上運行命令的位置? 如果在本地計算機上啟動了該工作程序,則它將啟動Azure緩存,並調用生產環境API。 但是由於工作程序是在本地啟動的,因此API中的路徑附加文件不正確且是本地的,而不是像生產一樣。 /User/../Media/ ..而不是/wwwroot/../media/ ..

有任何想法嗎? 如何在生產VM上啟動工作程序? 有沒有辦法在git push azure master之后運行start worker“script”?

我跳過Azure並將應用程序移動到Heroku。 這充當了魅力。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM