【问题标题】:Openshift Find Static Files From Django AppOpenshift 从 Django 应用中查找静态文件
【发布时间】:2018-06-18 16:29:09
【问题描述】:

我正在尝试向我在 openshift 上部署的 django 应用程序添加一个 css 文件。目前,我可以让 css 文件在本地运行时使用调试和所有这些工作。但是,当我将应用程序部署到 openshift 时,css 文件没有任何作用。网上的许多其他问题似乎是指旧版本的 django 和 openshift(很多对 wsgi 文件夹的引用似乎不再是标准并手动触发 collectstatic

我对当前 django/openshift 关系的理解是,我不需要手动进行 collectstatic,因为我使用的是 openshift 中的 django-ex 模板,并且在构建过程中自动运行 collectstatic 命令,其输出我可以在日志中看到。值得注意的是,我可以看到我的应用程序的 style.css 文件被复制到该日志中的 STATIC_ROOT 中。

我的项目根目录中的项目结构是这样的:

.
├── db.sqlite3
├── djangoWrapper
│   ├── __init__.py
│   ├── settings.py
│   ├── templates
│   │   └── djangoWrapper
│   │       └── index.html
│   ├── urls.py
│   ├── views.py
│   └── wsgi.py
├── gitlab-ci.yml
├── ldap
│   ├── admin.py
│   ├── apps.py
│   ├── forms.py
│   ├── __init__.py
│   ├── migrations
│   ├── models.py
│   ├── static
│   │   └── ldap
│   │       └── style.css
│   ├── templates
│   │   └── ldap
│   │       ├── apiOffline.html
│   │       ├── index.html
│   │       ├── results.html
│   │       └── search.html
│   ├── tests.py
│   ├── urls.py
│   └── views.py
├── manage.py
├── openshift
├── README.md
├── requirements.txt

这是我在 settings.py 中所做的:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
STATIC_URL = '/static/'    
STATICFILES_DIRS = [os.path.join(BASE_DIR, "ldap", "static"),]         
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

在我的 html 文件中,我尝试加载 css 文件

{% load static %}
<link rel="stylesheet" type="text/css" href="{% static 'ldap/style.css' %}">

&lt;head&gt; 部分。

我试图在这里进行一些调试,因为在我开始部署之前会假设问题是我的静态文件没有放在正确的位置/djgano 找不到它们。因此,我将一些打印件放入我的应用程序并将其部署在 openshift 上并返回以下信息:

BASE_DIR: /opt/app-root/src
STATIC_ROOT: /opt/app-root/src/static 
STATIC_URL: /static/ 
APP_VIEW_DIR: /opt/app-root/src/ldap/views.py 

以及将&lt;p&gt;"{%static 'ldap/style.css' %}"&lt;/p&gt; 放入一个html 文件中,显示为/static/ldap/style.css

从这些花絮中,我知道openshift的根目录是/opt/app-root/src/,我的静态文件在/opt/app-root/src/static,我的html正在寻找/static/ldap/style.css中的css文件。当所有这些目录排成一行时,这似乎应该可以正常工作。还有其他关于使用 django/openshift 提供静态文件的其他内容吗?

【问题讨论】:

  • 正在使用什么 WSGI 服务器?通常,如果它检测到 Django 应用程序,它将使用manage.py runserver 并处理静态。但是,您不应该依赖它来进行生产。如果您在requirements.txt 中有gunicorn,它将使用wsgi.py 文件运行gunicorn。除非使用 Whitenoise,否则在这种情况下不会处理静态文件。最好的选择是切换到使用 ``mod_wsgi-express。

标签: python css django openshift


【解决方案1】:

终于搞定了!按照here 的步骤,我确实使用了白噪声。

【讨论】:

    猜你喜欢
    • 2014-06-03
    • 2014-08-15
    • 2014-08-27
    • 1970-01-01
    • 2016-10-17
    • 1970-01-01
    • 2020-06-14
    • 2013-10-28
    • 2016-10-26
    相关资源
    最近更新 更多