我是Docker,AWS Lambda和Zappa的新手,但我正在尝试配置项目,但收效甚微。
我连接到Docker(docker-compose run web bash
),激活环境,配置AWS凭据并运行zappa init
和zappa deploy
。但是,部署后我收到错误(执行zappa tail
):
ModuleNotFoundError: No module named 'project'
我认为那是因为我的目标结构不是标准:
Dockerfile
zappa_settings.json
requirements.txt
project\
- manage.py
- root\
- settings.py
- wsgi.py
- ...
所以,我的django项目位于project
文件夹中,因为我不喜欢将所有文件放在那里并与其他配置文件混合。
我的zappa配置文件如下所示:
{
"dev": {
"aws_region": "us-east-2",
"django_settings": "project.root.settings",
"profile_name": "default",
"project_name": "task",
"runtime": "python3.6",
"s3_bucket": "bucket-name"
}
}
和Dockerfile:
FROM lambci/lambda:build-python3.6
# Copy in your requirements file
ADD requirements.txt /requirements.txt
# Copy your application code to the container
RUN mkdir /code/
WORKDIR /code/
ADD . /code/
ENV PS1 'zappa@$(pwd | sed "s@^/var/task/\?@@")\$ '
ADD zappa_settings.json /var/task/zappa_settings.json
WORKDIR /var/task
RUN virtualenv /var/venv && \
source /var/venv/bin/activate && \
pip install -U pip zappa && \
pip install -r /requirements.txt && \
deactivate
CMD ["zappa"]
你能告诉我如何正确设置吗?谢谢!
更新
移至子文件夹后的最新错误:
答案 0 :(得分:1)
您可以使用zappa保留文件结构,它可以正常工作。
给定文件结构
Dockerfile
您可以将FROM lambci/lambda:build-python3.6
ADD . /var/task
RUN python -m venv /var/task/dockervenv && \
source /var/task/dockervenv/bin/activate && \
pip install -U pip zappa && \
pip install -r /var/task/requirements.txt && \
deactivate
WORKDIR /var/task
ENV PS1 'zappa@$(pwd | sed "s@^/var/task/\?@@")\$ '
CMD ["bash"]
简化为
ModuleNotFoundError: No module named 'root'
从你的更新看来,你得到了类似的结果,因为你的Django应用程序似乎达到了Django代码。大概你也有edited your ALLOWED_HOSTS to accept incoming connections
现在错误settings.py
是因为您的Django设置文件不希望存在于子目录中。您必须更新ROOT_URLCONF = 'project.root.urls'
以更新变量
docker run -ti -v $(pwd):/var/task --rm <name of your image>
这应该让你起步并运行。
此泊坞窗方法的副作用
另外,设置docker容器的方式对编码工作流程有一些影响。您的docker镜像将在构建时包含代码的副本。因此,当容器结束时,对正在运行的docker容器中的代码的任何编辑都将丢失,除非以某种方式导出(例如git)。虽然这对于CI / CD管道中的稳定代码来说非常好,但我不建议将其用于主动开发。
如果您想将其用于主动开发,那么在调用docker时,请在调用容器时将项目直接映射为卷。例如:
{{1}}
答案 1 :(得分:0)
移动即可,zappa_settings.json 和 zappa 生成的 .json 部署到您的子文件夹中。
然后更新 zappa_settings.json: "django_settings": "project.root.settings" --> "django_settings": "root.settings"
cd 进入项目文件夹并执行 zappa update dev。
不是最好的解决方案,但对我有用