繁体   English   中英

Nginx 不会更新 Django 的 static 文件

[英]Nginx wont update static files for Django

我在 Ubuntu 上部署了 Nginx Nginx + Gunicorn + Django服务器。 它以Debug=False设置运行,一切正常。 CSS加载正常, JS也可以。 但是当我尝试更新css文件或js文件时,我所做的更改并没有在我运行服务器时反映出来。 我尝试更新旧的 static 文件,以及在collectstatic命令后创建的 static 文件,我还尝试了 clean collectstatic以及systemctl restart nginx (and gunicorn) 我还清理了浏览器中的缓存。 但是当我查看一个页面源代码时,这些变化是不存在的。

这就是我的nginx config的样子

server {
    listen       80;
    server_name  mediadbin.n-media.co.jp;
    client_max_body_size 500M;
    access_log /home/mediaroot/mediadbin/logs/nginx-access.log;
    error_log /home/mediaroot/mediadbin/logs/nginx-error.log;
    server_tokens off;

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host               $host;
        proxy_set_header X-Forwarded-For    $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Host   $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Real-IP          $remote_addr;
    }

    location /static { $ I TRIED APPLY CHANGES HERE <- NOTHING happens
        alias /home/mediaroot/mediadbin/mediadbin/static;
    }

    location /media {
        alias /home/mediaroot/mediadbin/mediadbin/media;
    }

    include global404;


}

这是我的gunicorn配置


#!/bin/bash
# Name of the application
NAME="mediadbin"

# Django project directory
DJANGODIR=/home/mediaroot/mediadbin/mediadbin

# how many worker processes should Gunicorn spawn
NUM_WORKERS= $(( $(nproc) * 2 + 1 ))

# which settings file should Django use
DJANGO_SETTINGS_MODULE=mediadbin.settings

# WSGI module name
DJANGO_WSGI_MODULE=mediadbin.wsgi
echo "Starting $NAME as `whoami`"

# Activate the virtual environment
cd $DJANGODIR
ENV=new_django
source /root/.virtualenvs/new_django/bin/activate



# Start your Django Unicorn
# Programs meant to be run under supervisor should not daemonize themselves (do not use --daemon)

exec gunicorn ${DJANGO_WSGI_MODULE}:application \
--timeout 600
--name $NAME \
--workers &NUM_WORKERS \
--bind=127.0.0.1 \
--log-level=debug \
--log-file=-
>>> sudo find / -name menu_detail_look.js
/home/mediaroot/mediadbin/mediadbin/static/main_app/js/menu_detail_look.js
/home/mediaroot/mediadbin/mediadbin/main_app/static/main_app/js/menu_detail_look.js

↑ 两者都更新了,没有任何反应(js 也没有错误)

首先,如果你设置 static 位置 nginx 那么 static 文件肯定会通过 ZEE434Z633CF89D7DFDF74 加载

让你像 static 块一样(而不是别名使用root):

location /static/ {
        root /home/mediaroot/mediadbin/mediadbin/static/;
}

还要确保 static 根设置为: /home/mediaroot/mediadbin/mediadbin/static/

运行 collectstatic 会将所有 static 文件复制到 static 根文件夹,nginx 将为其提供服务。

嗯,已经很久了,Aliright,如果现在任何从事此工作的人都可以检查此解决方案

在 urls.py

from django.conf import settings
from django.conf.urls.static import static

然后在底部定义

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

或(取决于您的环境。)

if settings.DEBUG:
    # static files (images, css, javascript, etc.)
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

并在 settings.py

定义媒体路径

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

确保在 /etc/nginx/sites-available/domainxxx 中定义路径

如果您的文件夹路径是 /home/admin/django/project/media

location /media/ {
    root /home/admin/django/project;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM