尝试部署时找不到Django设置

2024-04-20 03:50:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我将Django应用程序设置放在app文件夹中的一个文件夹中,该文件夹具有init.py,这在我当前的VPS服务器、Pycharm开发和Divio本地开发环境中都能正常工作。但是,当我尝试将其部署到Divio staging时,我得到“ModuleNotFoundError:No module named‘settings’”。为什么会这样?在

在管理.py公司名称:

#!/usr/bin/env python
import os
from aldryn_django import startup


if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "app.settings")
    startup.manage(path=os.path.dirname(os.path.abspath(__file__)))

没有设置.py文件

名为“设置”的文件夹:

初始化

^{pr2}$

其中进口:

在普通.py 开发_divio.py公司在

上面的两个文件中有config。在


Tags: 文件pathdjangopyimport文件夹app应用程序
1条回答
网友
1楼 · 发布于 2024-04-20 03:50:56

你就快到了。在

Django如何在Divio项目中找到它的设置

manage.py的更改允许Dockerfile执行collectstatic

RUN DJANGO_MODE=build python manage.py collectstatic  noinput

正确查找设置。实际上,您将DJANGO_SETTINGS_MODULE环境变量硬编码到manage.py中。在

这将允许任何manage.py命令查找设置,因此(正如您所发现的那样),您可以在本地运行站点。在

但是,其他命令也需要知道设置的位置,例如在云部署中使用的start web命令,或者在本地使用run the local server in live configuration。在

这些命令依赖于一个正确设置的DJANGO_SETTINGS_MODULE环境变量,可以在.env-local中本地设置,也可以使用控制面板中的环境变量视图对云服务器进行设置。在

但是,仅当容器从已构建的映像启动时,以这种方式设置的环境变量才可用。它们将不适用于Dockerfile中的collectstatic命令,因为在这个阶段,正在构建。在

必须提供相同的信息两次是不礼貌的,尤其是在Python模块中硬编码环境变量。在

最佳解决方案

事实上,你不需要做这些事情。不是修改manage.py为每个环境自定义环境变量,而是添加:

^{pr2}$

到Dockerfile(在执行任何Django命令之前)。在

这将使变量立即可用,并将其烘焙到图像中,以便从中创建的每个容器默认都包含该变量。在

以这种方式设置的变量仍然可以在每个环境的基础上被重写。在

相关问题 更多 >