Использование файловой системы в качестве result_backend с сельдереем, но это не работает. как выглядит правильный конфиг? - PullRequest
0 голосов
/ 22 октября 2019

Я довольно новичок в использовании Celery и не могу правильно настроить result_backend. Я не могу получить результат из сгенерированного task_id (хотя задание выполняется). Я использую Docker для запуска этого и предоставляю права доступа к папке.

Я использую сельдерей с колбой и настройки следующие:

 broker_api = 'http://guest:guest@rabbit:15672/api/'
 broker = 'amqp://guest:guest@rabbit:5672//'
 BROKER_URL = 'amqp://guest:guest@rabbit:5672//'
 broker = 'amqp://rabbit'
 backend = 'amqp'
 celeryApp = Celery('buildq', broker=broker, backend=backend)

В конфигурации сельдерея у меня есть

CELERY_RESULT_BACKEND = 'file:///mnt/celery/results/'
CELERY_RESULT_PERSISTENT = True

Файл Docker-compose

services:
  worker:
    build: .
    depends_on:
     - rabbit
    working_dir:
     '/code'
    entrypoint:
     - celery
     - worker
     - --app
     - BulkModlingQ.tasks
     - --config
     - celeryconfig
     - --loglevel=info


  flower:
    build: .
    depends_on:
    - rabbit
    - worker
    ports:
    - "5555:5555"
    working_dir:
      '/code'
    entrypoint:
    - celery
    - flower
    - --app
     - BulkModlingQ.tasks
    - --config
    - flowerconfig

  api:
    build: .
    depends_on:
      - rabbit
    working_dir:
      '/code'
    entrypoint:
      - python
      - -m
      - BulkModlingQ.api
    ports:
      - "5000:5000"

  rabbit:
    image: rabbitmq:3-management
    ports:
      - "15672:15672"

В рабочих журналах тоже не возникает никаких ошибок.

ДАЖЕ, если я настрою настройку сельдерея для использования 's3' в качестве result_backend

CELERY_RESULT_BACKEND = 's3://'
S3_ACCESS_KEY_ID = '****'
S3_SECRET_ACCESS_KEY = '****'
S3_BUCKET = '****'
S3_BASE_PATH = 'celery'
S3_REGION = 'us-east-1'

Я получаюошибка, что строки не могут быть соединены байтами

[2019-10-18 22:17:04,571: ERROR/MainProcess] Pool callback raised exception: TypeError('can only concatenate str (not "bytes") to str')
Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/billiard/pool.py", line 1750, in safe_apply_callback
    fun(*args, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/celery/worker/request.py", line 371, in on_failure
    store_result=self.store_errors,
  File "/usr/local/lib/python3.7/site-packages/celery/backends/base.py", line 160, in mark_as_failure
    traceback=traceback, request=request)
  File "/usr/local/lib/python3.7/site-packages/celery/backends/base.py", line 342, in store_result
    request=request, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/celery/backends/base.py", line 714, in _store_result
    self.set(self.get_key_for_task(task_id), self.encode(meta))
  File "/usr/local/lib/python3.7/site-packages/celery/backends/s3.py", line 70, in set
    s3_object = self._get_s3_object(key)
  File "/usr/local/lib/python3.7/site-packages/celery/backends/s3.py", line 56, in _get_s3_object
    key_bucket_path = self.base_path + key if self.base_path else key
TypeError: can only concatenate str (not "bytes") to str
...