我将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。在
你就快到了。在
Django如何在Divio项目中找到它的设置
对
manage.py
的更改允许Dockerfile执行collectstatic
:正确查找设置。实际上,您将
DJANGO_SETTINGS_MODULE
环境变量硬编码到manage.py
中。在这将允许任何
manage.py
命令查找设置,因此(正如您所发现的那样),您可以在本地运行站点。在但是,其他命令也需要知道设置的位置,例如在云部署中使用的
start web
命令,或者在本地使用run the local server in live configuration。在这些命令依赖于一个正确设置的
DJANGO_SETTINGS_MODULE
环境变量,可以在.env-local
中本地设置,也可以使用控制面板中的环境变量视图对云服务器进行设置。在但是,仅当容器从已构建的映像启动时,以这种方式设置的环境变量才可用。它们将不适用于Dockerfile中的
collectstatic
命令,因为在这个阶段,正在构建。在必须提供相同的信息两次是不礼貌的,尤其是在Python模块中硬编码环境变量。在
最佳解决方案
事实上,你不需要做这些事情。不是修改
^{pr2}$manage.py
和为每个环境自定义环境变量,而是添加:到Dockerfile(在执行任何Django命令之前)。在
这将使变量立即可用,并将其烘焙到图像中,以便从中创建的每个容器默认都包含该变量。在
以这种方式设置的变量仍然可以在每个环境的基础上被重写。在
相关问题 更多 >
编程相关推荐