簡體   English   中英

Django App + Nginx無法存儲靜態文件

[英]Django app + nginx fail to server static files

我遇到了一個非常常見的問題,沒有加載我的靜態文件404被拋出。 需要注意的是,我在生產環境中使用DEBUG=False設置,因此靜態文件完全由nginx服務器提供。

設置/ production.py

STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static')
STATIC_URL = '/static/'
DEBUG = TEMPLATE_DEBUG = False

nginx的/啟用的站點 - / MYAPP

server {
    listen   80; ## listen for ipv4; this line is default and implied
    server_name myapp.com;
    access_log /var/log/nginx/myapp.log;
    error_log /var/log/nginx/myapp.log;

    root /home/apps/myapp/;

    location / {
            gzip_static on;
            include uwsgi_params;
            uwsgi_pass 127.0.0.1:3031;
    }

    location /static/ { # STATIC_URL
            alias /home/apps/myapp/static/; # STATIC_ROOT
            expires 30d;
    }
    location /media/ { # MEDIA_URL
            alias /home/apps/myapp/media/; # MEDIA_ROOT
            expires 30d;
    }
}

myapp.log

2014/04/08 04:20:11 [error] 22178#0: *590 open() "/home/apps/myapp/staticgrappelli/stylesheets/mueller/grid/output.css" failed (2: No such file or directory), client: 77.89.196.6, server: myapp.com, request: "GET /static/grappelli/stylesheets/mueller/grid/output.css HTTP/1.1", host: "myapp.com", referrer: "http://myapp.com/admin/"
77.89.196.6 - - [08/Apr/2014:04:20:11 +0200] "GET /static/grappelli/stylesheets/mueller/grid/output.css HTTP/1.1" 404 200 "http://myapp.com/admin/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.152 Safari/537.36"

請注意,在此示例中,靜態根目錄/home/apps/myapp/static和應用程序靜態文件grappelli/stylesheets/mueller/grid/output.css之間缺少/

是否有人知道為什么會發生以及如何解決?

更新(解決方案)

好的,問題在於,默認情況下, www.myapp.com/static/ /static/文件夾提供了Django's靜態文件,因此沒有理由在nginx配置文件中指定/static/文件夾。 因此,如果其他人也nginx/sites-enabled/myapp相同的問題,只需從nginx/sites-enabled/myapp文件中刪除以下部分:

location /static/ { # STATIC_URL
        alias /home/apps/myapp/static/; # STATIC_ROOT
            expires 30d;
        }
        location /media/ { # MEDIA_URL
            alias /home/apps/myapp/media/; # MEDIA_ROOT
            expires 30d;
        }

好的,問題在於,默認情況下, www.myapp.com/static/ /static/文件夾提供了Django's靜態文件,因此沒有理由在nginx配置文件中指定/static/文件夾。 因此,如果其他人也nginx/sites-enabled/myapp相同的問題,只需從nginx/sites-enabled/myapp文件中刪除以下部分:

location /static/ { # STATIC_URL
        alias /home/apps/myapp/static/; # STATIC_ROOT
            expires 30d;
        }
        location /media/ { # MEDIA_URL
            alias /home/apps/myapp/media/; # MEDIA_ROOT
            expires 30d;
        }

您是否在服務器上運行了python manage.py collectstatic?

確保文件位於靜態根目錄中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM