我有一个以下结构的python Celery项目:
├── celeryconfig.py
├── Dockerfile
│ └── _templates
├── framework
│ ├── celery
│ │ ├── celery.py
│ │ ├── __init__.py
│ │ └── __init__.cpython-36.pyc
│ ├── tasks
│ │ ├── tasks.py
│ │ ├── __init__.py
│ ├── utilities
│ │ ├── utilities.py
│ │ ├── __init__.py
│ ├── tests
│ │ ├── __init__.py
│ │ └── test_celery.py
我使用命令celery framework.celery.celery worker
我在使用nose2运行的tests目录中有tets。当我在目录中运行它时测试通过没有问题。但是,当测试作为docker构建过程的一部分运行时,nose2进程会失败,因为它无法理解导入,例如
# test_celery.py
from framework.tasks.tasks import my_function
def test_my_function():
# Do some testing.
导入该函数成功,但导入文件的导入失败,如下所示:
# tasks.py
from framework.utilities.utilities import some_other_function
我遇到的部分问题是Celery特别关注它本身的结构,因此尝试重组目录只会导致芹菜无法启动。我不太清楚为什么测试只在docker构建中失败,看起来像这样:
FROM google/cloud-sdk:198.0.0-alpline
COPY . /project
WORKDIR /project
RUN apk add --no-cache python3 python3-dev && pip3 install -r requirements.txt
RUN nose2