Как исправить ошибку модуля в колбе RQ работника - PullRequest
0 голосов
/ 16 мая 2019

Я использую docker-compose для создания веб-приложения с Redis и работником.Кроме того, у меня есть панель мониторинга rq для мониторинга.

Весь проект находится в среде vagrant- ubuntu

Структура проекта:

project/
       app_main/
                moduleA/
                        classA  - The task to do
                jobs.py    - Implements the job
                queue.py   - Has the code perform.queue(id)
      scripts/
              worker/
                     dockerfile
                     worker.py
      dockerfile
      docker-compose.yml
      app.py

Докер собирается правильно, приложение работает нормально.Но когда рабочий запускается, он выдает ошибку: ModuleNotFoundError: Ни один модуль с именем 'app_main'

Я добавил --path в docker-compose вместо того, чтобы иметь отдельный файл docker, все равно получил ошибку.


# jobs.py
from flask_rq2 import RQ
from app_main.moduleA.classA import methodA

rq = RQ(redis_url="redis://redis:6379/0")

@rq.job
def perform(id):

    methodA().subMethodA(id)

    return True


# worker.py

import os

import redis
from rq import Worker, Queue, Connection

listen = ['high', 'default', 'low']

redis_url = os.getenv('REDISTOGO_URL', 'redis://redis:6379')

conn = redis.from_url(redis_url)

if __name__ == '__main__':
    with Connection(conn):
        worker = Worker(map(Queue, listen))
        worker.work()

docker-compose


version: "3.7"

services:

  web:
    build:
      context: .
      dockerfile: Dockerfile
    restart: always
    ports:
      - "5000:5000"
    depends_on:
      - redis
    restart: always
    volumes:
      - .:/app
    image: web
    environment:
      - MODE=dev
      - REDIS_URL='redis://redis:6379/0'
      - RQ_REDIS_URL='redis://redis:6379/0'
    networks:
      - app-net

  redis:
    image: redis:4.0.11-alpine
    command: ["redis-server", "--appendonly", "yes"]
    hostname: redis
    networks:
      - app-net
    volumes:
      - redis-data:/data


  dashboard:
    build: ./app_main/dashboard
    image: dashboard
    container_name: dashboard
    ports:
      - '9181:9181'
      - '6379:6379'
    command: rq-dashboard -H redis
    networks:
      - app-net
    volumes:
      - redis-data:/data

  job_worker:
    build: ./scripts/worker
    depends_on:
      - redis
    networks:
      - app-net
    volumes:
      - redis-data:/data

# Docker network
networks:
  app-net:

volumes:
  redis-data:

Журнал ошибок

[31mjob_worker_1    |[0m Traceback (most recent call last):
[31mjob_worker_1    |[0m   File "/usr/local/lib/python3.7/site-packages/rq/worker.py", line 812, in perform_job
[31mjob_worker_1    |[0m     rv = job.perform()
[31mjob_worker_1    |[0m   File "/usr/local/lib/python3.7/site-packages/rq/job.py", line 588, in perform
[31mjob_worker_1    |[0m     self._result = self._execute()
[31mjob_worker_1    |[0m   File "/usr/local/lib/python3.7/site-packages/rq/job.py", line 594, in _execute
[31mjob_worker_1    |[0m     return self.func(*self.args, **self.kwargs)
[31mjob_worker_1    |[0m   File "/usr/local/lib/python3.7/site-packages/rq/job.py", line 199, in func
[31mjob_worker_1    |[0m     return import_attribute(self.func_name)
[31mjob_worker_1    |[0m   File "/usr/local/lib/python3.7/site-packages/rq/utils.py", line 155, in import_attribute
[31mjob_worker_1    |[0m     module = importlib.import_module(module_name)
[31mjob_worker_1    |[0m   File "/usr/local/lib/python3.7/importlib/__init__.py", line 127, in import_module
[31mjob_worker_1    |[0m     return _bootstrap._gcd_import(name[level:], package, level)
[31mjob_worker_1    |[0m   File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
[31mjob_worker_1    |[0m   File "<frozen importlib._bootstrap>", line 983, in _find_and_load
[31mjob_worker_1    |[0m   File "<frozen importlib._bootstrap>", line 953, in _find_and_load_unlocked
[31mjob_worker_1    |[0m   File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
[31mjob_worker_1    |[0m   File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
[31mjob_worker_1    |[0m   File "<frozen importlib._bootstrap>", line 983, in _find_and_load
[31mjob_worker_1    |[0m   File "<frozen importlib._bootstrap>", line 965, in _find_and_load_unlocked
[31mjob_worker_1    |[0m ModuleNotFoundError: No module named 'app_main'

Рабочий файл dockerfile

FROM python:3

ADD ./worker.py .

RUN pip install rq redis

ENTRYPOINT ["python"]

CMD ["./worker.py"]

1 Ответ

0 голосов
/ 18 мая 2019

Я перепробовал много решений, не сработало.

Решение, которое я сделал, я поместил рабочий докер-файл в корневую папку.Модифицировал файл docker с помощью WORKDIR ./app и установил зависимости из pip install -r needs.txt.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...