【问题标题】:Nginx wont update static files for DjangoNginx 不会为 Django 更新静态文件
【发布时间】:2021-08-25 01:00:54
【问题描述】:

我在 Ubuntu 上部署了Nginx + Gunicorn + Django 服务器。它使用Debug=False 设置运行,一切正常。 CSS 加载正常,JS 也可以。但是当我尝试更新css 文件或js 文件时,我所做的更改不会在我运行服务器时反映出来。 我尝试更新旧的静态文件,也是在collectstatic 命令之后创建的静态文件,我还尝试了干净的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 也没有错误)

【问题讨论】:

标签: python python-3.x django nginx


【解决方案1】:

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

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

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

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

运行 collectstatic 会将所有静态文件复制到静态根文件夹,然后由 nginx 提供服务。

【讨论】:

    猜你喜欢
    • 2016-01-28
    • 2020-12-11
    • 1970-01-01
    • 2015-03-10
    • 2018-10-09
    • 1970-01-01
    • 2021-12-02
    • 2020-09-14
    • 2021-11-20
    相关资源
    最近更新 更多