使用 django-host 创建的子域未在产品中设置样式

问题描述 投票:0回答:2

我最近向 digitalocean 部署了一个 django 项目。该项目有一些 django 应用程序并实现了用于子域配置的 django-hosts。 虽然这在本地运行良好,但部署到 digitalocean 后导航到子域时找不到静态文件。

网站的所有其他部分的样式均正确。

问题:

  1. 我能做些什么来纠正这个异常吗?
  2. 有没有其他方法可以做到这一点而无需使用 django-hosts。

这是网站: Kingdomleadsafrica.org

子域是: Executives.kingdomleadsafrica.org

谢谢

django nginx subdomain digital-ocean django-hosts
2个回答
0
投票

在生产环境中在 django 中创建子域非常简单且直接。

注意:您不需要任何插件(例如 django-hosts 或 django-subdomain)来实现此目的。

我对我的项目所做的是将其分成两个不同的项目,并给它们起不同的名称。

使用 nginx 和 Gunicorn 将单个项目部署到 digitalocean 时,我将这两个项目放在同一个项目目录中。

我为每个项目创建了gunicorn.sock和gunicorn.service,将gunicorn更改为项目名称,例如,如果我的项目名称是博客和论坛,我将为博客创建blog.sock和blog.service,并为另一个项目创建相应的名称项目。

nginx 也会做同样的事情。您将所需的域名放入 nginx 的服务器部分。

确保正确填写目录,尤其是gunicorn.service(在本例中为blog.service 和其他)。

此外,如果您想运行任何与gunicorn相关的命令,您将输入服务文件的名称。

请记住将您的子域名包含在您的settings.py中,并在您的digitalocean中将其创建为A记录

祝你好运。


0
投票

检查静态文件配置: 验证 Django 设置中的静态文件配置是否正确。确保您已正确设置 STATIC_URL 和 STATIC_ROOT。

在你的settings.py中,你应该有这样的内容:

STATIC_URL = '/静态/' STATIC_ROOT = os.path.join(BASE_DIR, '静态') STATIC_URL 是在模板中提供静态文件的 URL,STATIC_ROOT 是在运行时collectstatic 将复制静态文件的目录。

运行collectstatic: 在生产中,您需要运行collectstatic管理命令来收集应用程序中的所有静态文件并将它们放置在STATIC_ROOT指定的目录中。确保每当部署新版本的应用程序时都运行此命令。

运行以下命令:

python 管理.py 收集静态 检查文件权限: 确保运行 Django 应用程序的 Web 服务器具有访问静态文件所需的权限。验证运行服务器的用户是否具有静态文件和目录的读取权限。

检查静态文件是否存在: 运行collectstatic后,检查静态文件是否已复制到STATIC_ROOT指定的目录中。确保静态文件存在并且可访问。

测试静态URL: 检查是否可以通过在浏览器中访问静态文件的 URL 来直接访问静态文件。例如,如果您的 STATIC_URL 设置为 /static/,请尝试访问静态文件,例如 https://gwtc.tech/static/blog_app/style.css https://gwtc.tech/static/blog_app/revolution/css/layers.css

检查浏览器控制台中的错误: 打开浏览器的开发者控制台并检查是否存在与加载静态文件相关的任何错误。查找 404 错误或任何其他问题。

检查服务器日志: 检查服务器日志中是否有与静态文件相关的任何错误消息。在许多生产环境中,服务器日志位于 /var/log 目录中。查找与提供静态文件相关的任何错误。

检查Web服务器配置: 如果您使用 Nginx 或 Apache 等 Web 服务器来为 Django 应用程序提供服务,请确保将 Web 服务器配置设置为正确处理静态文件。检查 Web 服务器的配置文件中是否存在任何错误配置。

通过执行这些步骤,您应该能够识别和调试部署到生产环境时静态文件在 Django 应用程序中不起作用的问题。常见问题与配置错误、文件权限或 Web 服务器设置有关。一旦发现问题,您就可以采取适当的步骤来修复它并使静态文件按预期工作。

© www.soinside.com 2019 - 2024. All rights reserved.