当前位置: 首页 > 知识库问答 >
问题:

在子文件夹中部署zappa,Django项目

曾明诚
2023-03-14

我是Docker、AWS Lambda和Zappa的新手,但我正在尝试配置一个几乎没有成功的项目。

我连接到Docker(Docker compose运行web bash),激活环境,配置AWS凭据并运行zappa initzappa deploy。但是,在部署之后,我得到一个错误(执行zappa tail):

ModuleNotFoundError: No module named 'project'

我认为这是因为我的dir结构不是标准的:

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"]

你能告诉我如何正确设置它吗?谢谢!

更新:

移动到子文件夹后的最新错误:

共有2个答案

许阿苏
2023-03-14

只需移动,zappa_settings.json和zappa生成的. json部署到您的子文件夹。

然后更新zappa_设置。json:“django_设置”:“project.root.settings”--

CD到项目文件夹,并做一个zappa更新开发。

不是最好的解决办法但对我很管用

胥宏义
2023-03-14

您可以使用zappa保持您的文件结构,它将非常好地工作。

给定文件结构

Dockerfile
zappa_settings.json
requirements.txt
project\
- manage.py
- root\
   - settings.py
   - wsgi.py
   - ...

你可以简化你的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"]

从您的更新中,您似乎得到了类似的结果,因为您的Django应用程序似乎达到了Django代码。您可能还编辑了允许的_主机以接受传入连接

现在出现错误ModuleNotFoundError:没有名为“root”的模块,因为您的Django设置文件不希望存在于子目录中。您必须更新设置。py更新变量

ROOT_URLCONF = 'project.root.urls'

这应该能让你站起来跑步。

这种docker方法的副作用

顺便说一句,设置docker容器的方式对编码工作流有一些影响。docker映像将包含构建时代码的副本。因此,除非以某种方式导出(例如git),否则在容器结束时,对正在运行的docker容器中的代码的任何编辑都将丢失。虽然这对于CI/CD管道中的稳定代码来说是非常好的,但我不推荐它用于主动开发。

如果您希望将其用于活动开发,那么在调用docker时,在调用容器时将项目直接映射为卷。例如:

docker run-ti-v$(pwd):/var/task--rm

 类似资料:
  • 从过去3个星期开始,我们一直在使用Liveay和Portlet。 我下载了捆绑的增殖服务器,并将其放在本地驱动器上。我做了设置,能够正确地访问localhost:8080。 我还创建了一些自定义portlet,在eclipse中构建它们时,war文件被部署在路径C:/liferay/deploy中。 现在,我改变了服务器的位置,我想让服务器在D:/drive中。当我进行转换时,从D:/lifera

  • 我从Swashbuckle开始,我用Swashbuckle在.NET核心中创建了一个Web API。我需要在IIS站点的子应用程序中部署API > IIS站点(站点) null 你能告诉我我的代码有什么问题吗? 提前致谢

  • 要验证SSL证书,我需要将包含一些文件的隐藏文件夹(“/. well-known”)上传到我的应用程序。 我正在使用eclipse部署java应用程序,但这些文件不会在appEngine上的应用程序中接收。我想它们被过滤掉了。 我试图将隐藏文件夹作为静态文件添加到appengine web。xml,但它没有帮助。 我能上传这些文件夹和文件吗?

  • 问题内容: 我正在使用Heroku部署NodeJs应用程序。除了提供静态文件的一个小问题外,其他所有东西都工作正常。 我有以下配置 除非我尝试提供子文件夹中的静态文件,否​​则它工作正常。 www.example.com/bar.js //这会提供文件/htdocs/bar.js www.example.com/foo/bar.js //无法找到文件/htdocs/foo/bar.js 我忘了说在

  • 本文向大家介绍Apache部署Django项目图文详解,包括了Apache部署Django项目图文详解的使用技巧和注意事项,需要的朋友参考一下 前言 Django项目本身就可以启动运行,为什么还需要部署到Apache或者Nginx上呢?初学者都会遇到这个问题,我们来看看官方解释:It's intended only for use while developing. (We're in the b

  • 我已经部署了一个spring-boot应用程序JAR文件。现在,我想从android上传图像,并将其存储在资源目录的myfolder中。但无法获取资源目录的路径。 错误为:java.io.fileNotFoundException:src/main/resources/static/myfolder/myimage.png(没有这样的文件或目录) 这是将文件存储在资源文件夹中的代码