我有一个带有API的网站,客户可以发送其API-POST呼叫。这些API的附件以PDF或类似的形式存储在文件夹/媒体/存储/中。该应用程序用Django编写。
通过DRF和Serializers将API-CALL存储在模型中。数据存储后,完成了一些逻辑,发送电子邮件OS,查找和存储在数据表中等。因为这需要很多时间。我在应用程序中实现了芹菜(Redis作为经纪人的Azure Cache(,因此只能像往常一样完成模型中的第一个存储空间。其余的我们通过芹菜排队。
这在我的本地机器(MAC OS(上很好地工作。但不在生产中(Azure/Linux(。
我尝试过git钩,但是我无法正常工作。我已经通过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'
芹菜。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))
本地机器:所有人都可以与命令:芹菜-a hapionline工作者-L信息-Q high_priority
生产:我不知道在生产服务器上运行命令的位置?如果工人是在本地机器上启动的,则启动Azure缓存,并调用生产环境API可以使用。但是,由于工人是在本地启动的,因此API中太过附加的文件是不正确的,局部的,而不是类似于生产。/USER/../media/..代替/wwwroot/../Media/..
有什么想法吗?我如何在生产VM上启动工人?有没有办法在Git推动Azure Master之后运行启动工作"脚本"?
我跳过了Azure,将应用程序移至Heroku。这是一种魅力。