开始生产芹菜工人。在 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的主要内容,如果未能解决你的问题,请参考以下文章