开始生产芹菜工人。在 Azure/linux 应用服务上使用 Django/Python

Posted

技术标签:

【中文标题】开始生产芹菜工人。在 Azure/linux 应用服务上使用 Django/Python【英文标题】:Start Celery worker on production. Using Django/Python on Azure/linux app service 【发布时间】:2019-09-30 18:29:06 【问题描述】:

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

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

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

我已经尝试过 git hooks,但我无法让它工作。 我在 azure VM 上通过 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))

本地机器:使用以下命令一切正常:celery -A hapionline worker -l info -Q high_priority

生产:我不知道在生产服务器上的哪里运行命令? 如果 Worker 在本地机器上启动,它会启动 Azure 缓存,并调用生产环境 API。但是由于工作人员是在本地启动的,API 中的路径太附加文件是不正确的和本地的,而不是类似于生产的。 /User/../Media/.. 而不是 /wwwroot/../media/..

有什么想法吗?如何在生产 VM 上启动工作器?有没有办法在 git push azure master 之后运行启动工作者“脚本”?

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于开始生产芹菜工人。在 Azure/linux 应用服务上使用 Django/Python的主要内容,如果未能解决你的问题,请参考以下文章

芹菜花给不知名的工人

芹菜工人在 aws 弹性豆茎中失败 [退出:芹菜工人(退出状态 1;未预期)]

如何使用芹菜工人将 django 项目部署到谷歌云?

芹菜多里面码头工人容器

芹菜工人和一个命令击败负载

VSCode调试芹菜工人