Проблема с настройкой сельдерея / редиса в докере / django - PullRequest
0 голосов
/ 01 октября 2019

Вот мои текущие настройки:

needs.txt

celery[redis]

Dockerfile

RUN curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash
ENV PATH "/home/appuser/.pyenv/bin:$PATH"
RUN echo "export PATH=/home/appuser/.pyenv/bin:$PATH" >> /home/appuser/.bashrc
RUN echo 'eval "$(pyenv init -)"' >> /home/appuser/.bashrc
RUN echo 'eval "$(pyenv virtualenv-init -)"' >> /home/appuser/.bashrc

RUN pyenv install 3.7.0
RUN pyenv global 3.7.0

ENV PATH "/home/appuser/.pyenv/versions/3.7.0/bin:$PATH"

WORKDIR /code
COPY ./back-python/project/requirements.txt /code/
RUN pip3 install --upgrade pip
RUN pip3 install -r requirements.txt

проект / настройки

CELERY_BROKER_URL = 'redis://redis:6379/0'
CELERY_RESULT_BACKEND = 'redis://redis:6379/0'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'

проекты/init.py

from .celery import app as celery_app

__all__ = ['celery_app']

projects / celery.py

import os
from celery import Celery
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings')
app = Celery('project')
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))

docker-compose.yml

версия: '3'

services:
  ui:
    build: ./front-vue/.
    volumes:
      - ./front-vue/:/code
    ports:
      - "8888:8888"
    links:
      - django
    command: "npm run dev"

  redis:
    restart: always
    image: "redis:alpine"
    sysctls:
      - net.core.somaxconn=511

  django:
    build: .
    volumes:
      - ./back-python/project/:/code
      - ./front-vue/dist/pwa/:/code/public
    expose:
      - "8000"
    command: "python manage.py runserver [::]:8000"
    depends_on:
      - redis

  celery:
    build: .
    command: celery -A project worker -l info
    volumes:
      - ./back-python/project/:/code
    depends_on:
      - redis

Когда я запускаю docker-compose up, я получаю эту ошибку

celery_1  | Traceback (most recent call last):
celery_1  |   File "/home/appuser/.pyenv/versions/3.7.0/bin/celery", line 11, in <module>
celery_1  |     sys.exit(main())
celery_1  |   File "/home/appuser/.pyenv/versions/3.7.0/lib/python3.7/site-packages/celery/__main__.py", line 16, in main
celery_1  |     _main()
celery_1  |   File "/home/appuser/.pyenv/versions/3.7.0/lib/python3.7/site-packages/celery/bin/celery.py", line 322, in main
celery_1  |     cmd.execute_from_commandline(argv)
celery_1  |   File "/home/appuser/.pyenv/versions/3.7.0/lib/python3.7/site-packages/celery/bin/celery.py", line 496, in execute_from_commandline
celery_1  |     super(CeleryCommand, self).execute_from_commandline(argv)))
celery_1  |   File "/home/appuser/.pyenv/versions/3.7.0/lib/python3.7/site-packages/celery/bin/base.py", line 298, in execute_from_commandline
celery_1  |     return self.handle_argv(self.prog_name, argv[1:])
celery_1  |   File "/home/appuser/.pyenv/versions/3.7.0/lib/python3.7/site-packages/celery/bin/celery.py", line 488, in handle_argv
celery_1  |     return self.execute(command, argv)
celery_1  |   File "/home/appuser/.pyenv/versions/3.7.0/lib/python3.7/site-packages/celery/bin/celery.py", line 420, in execute
celery_1  |     ).run_from_argv(self.prog_name, argv[1:], command=argv[0])
celery_1  |   File "/home/appuser/.pyenv/versions/3.7.0/lib/python3.7/site-packages/celery/bin/worker.py", line 223, in run_from_argv
celery_1  |     return self(*args, **options)
celery_1  |   File "/home/appuser/.pyenv/versions/3.7.0/lib/python3.7/site-packages/celery/bin/base.py", line 252, in __call__
celery_1  |     ret = self.run(*args, **kwargs)
celery_1  |   File "/home/appuser/.pyenv/versions/3.7.0/lib/python3.7/site-packages/celery/bin/worker.py", line 257, in run
celery_1  |     **kwargs)
celery_1  |   File "/home/appuser/.pyenv/versions/3.7.0/lib/python3.7/site-packages/celery/worker/worker.py", line 101, in __init__
celery_1  |     self.setup_instance(**self.prepare_args(**kwargs))
celery_1  |   File "/home/appuser/.pyenv/versions/3.7.0/lib/python3.7/site-packages/celery/worker/worker.py", line 124, in setup_instance
celery_1  |     self.should_use_eventloop() if use_eventloop is None
celery_1  |   File "/home/appuser/.pyenv/versions/3.7.0/lib/python3.7/site-packages/celery/worker/worker.py", line 243, in should_use_eventloop
celery_1  |     self._conninfo.transport.implements.asynchronous and
celery_1  |   File "/home/appuser/.pyenv/versions/3.7.0/lib/python3.7/site-packages/kombu/connection.py", line 879, in transport
celery_1  |     self._transport = self.create_transport()
celery_1  |   File "/home/appuser/.pyenv/versions/3.7.0/lib/python3.7/site-packages/kombu/connection.py", line 600, in create_transport
celery_1  |     return self.get_transport_cls()(client=self)
celery_1  |   File "/home/appuser/.pyenv/versions/3.7.0/lib/python3.7/site-packages/kombu/transport/redis.py", line 1070, in __init__
celery_1  |     raise ImportError('Missing redis library (pip install redis)')
celery_1  | ImportError: Missing redis library (pip install redis)
celery_1 exited with code 1

Я провел некоторое исследование и похоже, что это произошло потому, что redis установлен под python2, который неимеет смысл для меня ... Кто-нибудь знает, в чем может быть проблема?

...