【问题标题】:Django Wagtail Deployment Static File ServerDjango Wagtail 部署静态文件服务器
【发布时间】:2019-08-24 11:00:09
【问题描述】:

今天部署后,出于某种原因,该项目不再显示在collectstatic 过程中收集的项目的样式。我可以从任何浏览器完全访问这些文件。我已经检查了所有权限。我已经从开发服务器和其他机器浏览到该站点以消除软件\字体的可能性。不知道这里发生了什么。

我从不同的服务器提供文件。其他 django 项目不受影响。不过,没有其他 django 项目使用像 wagtail 这样的东西。在这一点上拉我的头发,可能只是错过了一些简单的东西。我错过了什么?

base.py 配置

STATIC_ROOT = '/var/www/html/static.xxxxxx.net'
STATIC_URL = 'http://static.xxxxxx.net/'

MEDIA_ROOT = '/var/www/html/media.xxxxxx.net'
MEDIA_URL = 'http://media.xxxxxx.net/'

检查服务器上是否存在文件:

-rw-rw-r-- 1 xxxxxx xxxxxx 13648 Aug 24 09:18 /var/www/html/static.xxxxxx.net/wagtailadmin/css/userbar.3d5222a7eba2.css

检查 CSS 相对引用

-rw-rw-r-- 1 xxxxxx xxxxxx 68812 Aug 24 09:18 /var/www/html/static.xxxxxx.net/wagtailadmin/css/../../wagtailadmin/fonts/opensans-regular.45f80416d702.woff2

Django 调试工具栏显示了 4 个用于生产和开发环境的静态文件。一切都是一样的。

在 chrome 检查视图中,如果我将开发环境中的相对 CSS 样式表链接替换为来自文件服务器的链接,它会以同样的方式中断。

发件人:

/static/wagtailadmin/css/userbar.css

收件人:

http://static.xxxxxx.net/wagtailadmin/css/userbar.css

同样,我可以将该地址粘贴到我的浏览器中,任何浏览器,我都会看到样式表。我真的不知道我的文件服务器如何阻止浏览器处理 CSS,但这就是它开始的样子。

更新: 在 chrome 检查视图中,如果我从文件服务器中删除使用样式表的 css 引用,则页面会丢失所有样式\颜色\等。如果我将链接重新应用到我的服务器,它会再次应用样式。 它似乎应用了除图标\字形之外的所有样式。

更新 2:如果我更改为 STATIC_URL = '/static/',我会得到样式...直到我关闭调试:-/

【问题讨论】:

  • 什么是生产环境——Nginx、UWSGI、Apache?
  • @DanSwain Apache。我也更新了帖子。发现其他症状。

标签: django wagtail


【解决方案1】:

Wagtail 推荐的 STATIC_ROOTSTATIC_URLMEDIA_ROOTMEDIA_URL 设置通常要简单得多,..._URL 声明通常不是绝对引用。我在base.py 中这样设置:

PROJECT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
BASE_DIR = os.path.dirname(PROJECT_DIR)

STATICFILES_FINDERS = [
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
]

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

STATICFILES_DIRS = [
    os.path.join(os.path.join(BASE_DIR, directory_structure_down_to..., 'static'),
    --- include as many lines like above as necessary here ---
]

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

【讨论】:

  • 我确实尝试过,但最终破坏了其他东西,尤其是在禁用调试的情况下。当您检查\查看源代码时,样式表就在那里并且链接工作得很好,这是否有意义?
【解决方案2】:

如果您使用wagtail-react-streamfield,请更新它。字体wagtail.woff 在那里复制,在收集静态数据时,它首先被 Django 的静态子系统拾取(在 wagtail 的原始字体之前)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-10
    • 2020-09-07
    • 2013-12-08
    • 2018-10-11
    • 2016-04-16
    • 1970-01-01
    • 2014-05-26
    • 2019-04-04
    相关资源
    最近更新 更多