У меня есть приложение на django, в котором нужно раз в неделю создавать отчет из информации в базе данных. Я настроил celery, в логах пишется, что задача выполняется, однако в базе данных ничего не меняется.
Я попробовал сделать тестовую задачку и проверить, будет ли меняться вообще хоть что-то.
# файл app/tasks.py
from vkmt_api.celery import app
from authentication.models import User
@app.task
def test_task():
user = User.objects.get(username="test")
user.first_name = user.first_name + "1"
user.save()
# файл mainapp/celery.py
import os
from celery import Celery
from celery.schedules import crontab
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'my_project.settings')
app = Celery('my_project')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
app.conf.beat_schedule = {
"test-task": {
"task": "reports.tasks.test_task",
"schedule": crontab(minute="*/1")
}
}
# настройки в файле settings.py
REDIS_HOST = '0.0.0.0'
REDIS_PORT = '6379'
CELERY_BROKER_URL = 'redis://' + REDIS_HOST + ':' + REDIS_PORT + '/0'
CELERY_BROKER_TRANSPORT_OPTION = {'visibility_timeout': 3600}
CELERY_RESULT_BACKEND = 'redis://' + REDIS_HOST + ':' + REDIS_PORT + '/0'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
Исходя из вышеприведенного кода, следует максимально простая логика, раз в минуту должна выполняться функция
test_task()
и пользователю
test
к имени должна добавляться единица. То есть, через 5 минут после запуска приложения у пользователя
test
имя будет "name11111".
Скажите, что я делаю не так?