2016-12-14 6 views
0

Я столкнулся с очень странной проблемой, для которой я не мог найти причину. У меня есть приложение django с uWSGI в качестве моего сервера приложений и Nginx как наш обратный прокси. Моя исходная установка для статического URL в Django, как показано ниже:Nginx ищет другой путь, чем тот, который задан статическими файлами Django. Настройка URL

PROJECT_DIR = "/home/ubuntu/src/myapp" 

MEDIA_ROOT = os.path.join(PROJECT_DIR, 'media') 
MEDIA_URL = '/media/' 
STATIC_ROOT = os.path.join(PROJECT_DIR, 'staticfiles') 
STATIC_URL = '/staticfiles/' 

STATICFILES_DIRS = (
    os.path.join(PROJECT_DIR, 'static'), 
) 

и что там в Nginx конф, как показано ниже:

server { 
    listen  80; 
    server_name stg1.myapp.com 

    client_max_body_size 5G; # adjust to taste 

    access_log /var/log/nginx/myapp-access.log combined; 
    error_log /var/log/nginx/myapp-error.log; 

    location /media { 
     alias /home/ubuntu/src/myapp/media/; # your Django project's media files - amend as required 
    } 

    location /static { 
     alias /home/ubuntu/src/myapp/staticfiles/; 
    } 
    location/{ 
     uwsgi_pass django; 
     uwsgi_read_timeout 600s; 
     uwsgi_buffering off; 
     uwsgi_send_timeout 600s; 
     proxy_read_timeout 600s; 
     include /home/ubuntu/src/myapp/uwsgi_params; 

    } 
} 

Теперь, когда я пытаюсь получить доступ к серверу я был получаю эту ошибку для статических файлов:

2016/12/13 20:33:03 [error] 30533#0: *194 open() "/home/ubuntu/src/myapp/staticfiles/files/css/base.css" failed (2: No such file or directory), client: 172.31.4.166, server: stg.myapp.com, request: "GET /staticfiles/css/base.css HTTP/1.1", host: "stg.myapp.com", referrer: "http://stg.myapp.com/profile/user1" 

Collectstatic скопированные все файлы в данном STATIC_ROOT месте. Но путь, который был обыскан, был - STATIC_ROOT/files.

Когда я изменил STATIC_ROOT к

STATIC_ROOT = os.path.join(PROJECT_DIR, 'staticfiles/files') 

он работал. Я до сих пор не знаю, почему искали каталог staticfiles/files, а не только каталог staticfiles, как указано в nginx conf. Где я должен искать возможную причину?

EDIT - Я перезапустил службу nginx всякий раз, когда произошли изменения. Так что проблем нет.

ответ

1

я нашел причину.

STATIC_URL = '/staticfiles/' создает выпуск. Он должен быть

STATIC_URL = '/ static /'.

Раннее приложение добавляет files в путь по запросу, который вызывает мою проблему.

0

Не удается найти каталог файлов в любом месте в вашей первой настройке. [Я еще не имею права комментировать].


Настройка выглядит хорошо для меня, возможно, вы просто запустите перезапуск Nginx, когда вы изменили конфигурационный файл.

см ссылку на STATIC_ROOT in Django on Server

Также Static Root and Static Url confusion in Django

+0

Я пытался сменить nginx conf также много раз. Так что не было проблем с перезагрузкой. Также я никогда не менял путь статического на «actual_path/files». –

+0

@Nihal Sharma Если вы хотите получить доступ к «/home/ubuntu/src/myapp/staticfiles/files/css/base.css», вам нужно посмотреть каталог STATIC_ROOT, чтобы узнать, есть ли файл (/ files/css/base.css), который завершает работу. – shady

+0

@ Nihal Sharma Это не имеет ничего общего с STATIC_URL, у меня такая же настройка в моей локальной среде, с STATIC_URL = '/ staticfiles /'. Тем не менее Nginx мог найти файл, указанный STATIC_ROOT. – shady