У меня есть dockrized
контейнер для запуска flask app
. После настройки redis
и rq worker
я получаю ошибку для module not found
в рабочей задаче. Я уверен, что это какая-то проблема пути, я не могу понять, каким должен быть правильный путь для моего работника, чтобы найти любой из модулей, используемых в моем flask приложении.
Вот каков мой текущий проект Структура выглядит так:
- core-app
- app.py
- worker.py
- dashboard
- Dockerfile
- symbol
- __init__.py
- symbol.py
- Dockerfile
- docker-compose.yml
docker-compose.yml
version: "3.7"
services:
db:
image: mongo
ports:
- "27017:27017"
api:
image: core-app:latest
build: .
command: python -u app.py
ports:
- "5000:5000"
depends_on:
- db
- core_redis
worker:
image: core-app:latest
command: rq worker --path /core-app/ --url redis://core_redis:6379 my_queue
depends_on:
- core_redis
core_redis:
image: redis:5.0.8-alpine
ports:
- "6379:6379"
volumes:
- ./redis:/data
dashboard:
build: ./dashboard
image: dashboard
container_name: dashboard
ports:
- 9181:9181
command: rq-dashboard -H core_redis
depends_on:
- core_redis
worker.py
from symbol import symbol
def run_symbol_worker_task(symbol_id):
print('starting worker tasks for: ' + symbol_id) # in place of actual logging
symbol.some_func_here()
return {symbol_id: 'task complete'}
app.py
redis_conn = Redis(host='core_redis', port=6379, db=0)
q = Queue('my_queue', connection=redis_conn)
q.empty()
job = q.enqueue(run_symbol_worker_task, 'key')
print(job.get_status())
Ошибка я получаю:
worker_1 | Traceback (most recent call last):
worker_1 | File "/usr/local/lib/python3.7/site-packages/rq/worker.py", line 822, in perform_job
worker_1 | rv = job.perform()
worker_1 | File "/usr/local/lib/python3.7/site-packages/rq/job.py", line 605, in perform
worker_1 | self._result = self._execute()
worker_1 | File "/usr/local/lib/python3.7/site-packages/rq/job.py", line 611, in _execute
worker_1 | return self.func(*self.args, **self.kwargs)
worker_1 | File "/usr/local/lib/python3.7/site-packages/rq/job.py", line 200, in func
worker_1 | return import_attribute(self.func_name)
worker_1 | File "/usr/local/lib/python3.7/site-packages/rq/utils.py", line 155, in import_attribute
worker_1 | module = importlib.import_module(module_name)
worker_1 | File "/usr/local/lib/python3.7/importlib/__init__.py", line 127, in import_module
worker_1 | return _bootstrap._gcd_import(name[level:], package, level)
worker_1 | File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
worker_1 | File "<frozen importlib._bootstrap>", line 983, in _find_and_load
worker_1 | File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
worker_1 | File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
worker_1 | File "<frozen importlib._bootstrap_external>", line 728, in exec_module
worker_1 | File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
worker_1 | File "/core-app/worker.py", line 5, in <module>
worker_1 | from symbol import symbol
worker_1 | ImportError: cannot import name 'symbol' from 'symbol' (/usr/local/lib/python3.7/symbol.py)
Я не понимаю, почему путь не настроен для поиска в моем каталоге root, скорее он смотрит в usr/local/lib/python3.7
..