gpt4 book ai didi

django - 启动 Celery worker 进行生产。在 Azure/linux 应用服务上使用 Django/Python

转载 作者:行者123 更新时间:2023-12-02 06:44:00 25 4
gpt4 key购买 nike

我有一个带有 API 的网站,客户可以发送其 API 后调用。这些 API 具有 PDF 或类似形式的附件,存储在文件夹/MEDIA/Storage/中。该应用程序是用 Django 编写的。

API 调用通过 DRF 和序列化器存储在模型中。数据存储后,完成一些逻辑,发送电子邮件,查找并存储在数据表中等。因为这需要很多时间。我在我的应用程序中实现了 Celery(Azure Cache for Redis 作为代理),因此只有模型中的第一个存储会像往常一样完成。其余的我们通过 Celery 排队。

这在我的本地计算机(mac os)上运行良好。但不适用于生产环境(Azure/Linux)。

我尝试过 git hooks,但无法让它工作。我已经在 azure 虚拟机上通过 ssh 尝试过一些终端,但没有运气......我研究过守护进程,但它很复杂。

设置.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 hapionlineworker -l info -Q high_priority

生产:我不知道在生产服务器上哪里运行命令?如果工作线程在本地计算机上启动,它将启动 Azure 缓存,并且调用生产环境 API 可以工作。但由于工作程序是在本地启动的,API 中附加文件的路径不正确且是本地的,而不是像生产环境那样。/User/../Media/.. 而不是/wwwroot/../media/..

有什么想法吗?如何在生产虚拟机上启动工作线程?有没有办法在 git push azure master 之后运行启动工作程序“脚本”?

最佳答案

我跳过了 Azure 并将应用程序移至 Heroku。这很有魅力。

关于django - 启动 Celery worker 进行生产。在 Azure/linux 应用服务上使用 Django/Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56118380/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com