django - Django静态文件通过collectstatic递归保存创建膨胀
问题描述
在我的生产系统上运行 collectstatic 时,似乎递归存储了一堆文件,例如(真实示例):
'production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/production/css/lib/nestable/nestable.css'
每次我更新我的静态文件时都会导致膨胀(当我为前端更新任何 javascript 时这是必要的)。
我的 settings.py 文件有以下内容:
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static/production/')
STATICFILES_DIRS = ([
os.path.join(BASE_DIR, "static"),
])
+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
我的主要 urls.py 中也有
在我的 Nginx 可用站点配置文件中,我有以下几行:
location /static/ {
alias /home/ubuntu/myapp/static/production/;
expires modified +1w;
}
为了规避这个问题,我现在必须运行 collectstatic -c 并在每次更新时删除我的所有静态文件,这并不理想。
我哪里错了?
解决方案
这是因为您将收集的静态文件存储在静态源目录中。
Django 中的静态文件可以来自任何 Django 应用程序,因为应用程序可以定义自己的静态文件。为了简化您的服务器配置,所有静态文件都必须从您的项目和所有使用的应用程序中收集到一个目录,您的 Web 服务器可以从该目录中为它们提供服务。
STATIC_ROOT
是将收集所有静态文件的中央目录的位置。
STATIC_URL
STATIC_ROOT
从 Web 服务器端点反映您的情况。换句话说,在此 URL 上的所有文件STATIC_URL
都将由您的服务器提供。
STATICFILES_DIRS
与static
来自每个应用程序的目录一起是所有文件应该收集(复制)到该目录的STATIC_ROOT
目录。
在您的示例中,您将您的路径存储STATIC_ROOT
在 中定义的路径中STATICFILES_DIRS
,因此每次运行collectstatic
django 后都会将所有内容复制STATICFILES_DIRS
到您的STATIC_ROOT
中,包括STATIC_ROOT
之前复制的内容。
要解决您的问题,请隔离文件系统中的这两个位置并相应地调整您的 Django 设置。
推荐阅读
- cdi - 如何在 Quarkus 中创建自定义范围?
- c# - 在一行中处理条件语句
- vue.js - 随着时间的推移,维护多个 VueJS、@vue/cli 依赖应用程序的规定方法是什么?
- kubernetes - FATAL 日志在 Google Cloud Kubernetes 上被标记为 INFO
- pyqt5 - 如何在 Pyqt5 GUI 中嵌入 URxvt 终端?
- modelica - Modelica 嵌套/组合连接器
- xml - XSLT 根据输入数据的长度动态添加元素
- r - R中的下划线列名
- jupyter - 如何隐藏代码并重新运行 JupyterLab 中的所有单元格?
- laravel - Laravel - 如何根据 is_approved 显示提交编辑和删除