Вот мои текущие настройки:
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, который неимеет смысл для меня ... Кто-нибудь знает, в чем может быть проблема?