django - 具有多个 Django 站点的 Celery
问题描述
我有几个客户网站的一个 django 后端:
my_proj
|- my_proj
|- __init__.py
|- settings.py
|- settings_development.py
|- settings_production_1.py
|- settings_production_2.py
|- settings_production_3.py
|- my_app_1
|- my_app_2
...
settings_production_1.py:
from settings import *
DEBUG = False
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'customer_1_db',
'USER': 'some_user',
'PASSWORD': 'some_passw',
'HOST': '127.0.0.1',
'PORT': '',
}
}
MEDIA_ROOT = 'media/customer_1'
每个站点都是由 supervisord 管理的单独进程,并使用单独的数据库。我也有一个单独的服务器上的redis。
我需要一些具有数据库访问权限的 celery 后台任务。
我怎样才能做到这一点?
更新
好的,我可以运行多个芹菜工人。我可以从控制台做到这一点
$ export DJANGO_SETTINGS_MODULE=my_proj.settings_production_2
$ /home/.../my_vitrual_env/bin/celery -A my_proj worker -l info
但我不能从 supervisord 运行它
[program:celery2]
directory=/home/.../my_proj
command=/home/.../my_vitrual_env/bin/celery -A asl worker -l info
environment=DJANGO_SETTINGS_MODULE=my_proj.settings_production_2
...
解决方案
您为您的项目配置一个应用程序。例如:
my_proj
| - my_proj
|- __init__.py
|- celery.py
|- settings.py
|- settings_development.py
|- settings_production_1.py
|- settings_production_2.py
|- settings_production_3.py
等等
在 celery.py 中,您可以通过设置env 变量从适当的设置对象DJANGO_SETTINGS_MODULE
配置 celery 应用程序,并使用它来加载适当的设置。
celery multi -A my_proj
然后在 supervisord 中,通过将起始行指定为正确的DJANGO_SETTINGS_MODULE
env 变量,为每个站点提供自己的 celery 。
推荐阅读
- xml - 如何在没有元素名称的 xpath 中显示文本
- python - tf.Variables 的定义(使用列表?)
- r - dopar foreach(运行并行 for 循环)
- ios - CoreML 初始化失败:MTLTextureDescriptor 的宽度大于允许的最大大小
- amazon-s3 - 为什么ObjectExist 和listObjects 在S3 的Java API 上不一致?
- c - 使用位运算符在 C 中模拟浮点乘法
- go - 使用 Golang 启动另一个正在运行的程序实例的好方法是什么?
- d3.js - 数据更新时,D3JS V5 无法构建固定大小的图例切片
- typescript - 如何用浏览器和服务器两部分构建 TypeScript 项目?
- visual-studio-code - 在 Muticursor 中删除会导致意外行为?