2016-12-10 7 views
0

Я не могу понять, почему мои изображения не обслуживаются, когда мои другие статические файлы.Изображения не подаются с Django/Nginx

Я следую за этим tutorial, и все работает, за исключением того, что изображения не обслуживаются. Тем не менее, все остальные статические файлы (css, js и т. Д.).

Я пробовал посмотреть на Django Docs, несколько сообщений SO и документы Nginx.

После прочтения выше, я попытался переместить статические файлы в разные места, включая STATICFILES_DIR. Похоже, что статические файлы обнаруживаются и обслуживаются Nginx (за исключением img dir). Я вижу файлы css и js, когда я проверяю «Источники» с помощью инструментов разработчика Chrome, а не только файлы и файлы img.

Я очень ценю любую помощь, которую вы все можете иметь!

Settings.py

import os 

# Build paths inside the project like this: os.path.join(BASE_DIR, ...) 
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 
SETTINGS_PATH = os.path.dirname(os.path.dirname(__file__)) 

# TEMPLATE_DIRS = (
#  os.path.join(SETTINGS_PATH, 'templates'), 
#) 


# Quick-start development settings - unsuitable for production 
# See https://docs.djangoproject.com/en/1.10/howto/deployment/checklist/ 

# SECURITY WARNING: keep the secret key used in production secret! 
SECRET_KEY = '**' 

# SECURITY WARNING: don't run with debug turned on in production! 
DEBUG = False 

ALLOWED_HOSTS = ['138.197.19.209'] 


# Application definition 

INSTALLED_APPS = [ 
    'material', 
    'material.frontend', 
    'material.admin', 
    'django.contrib.admin', 
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
    'ihc', 
] 

MIDDLEWARE = [ 
    'django.middleware.security.SecurityMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.common.CommonMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    'django.middleware.clickjacking.XFrameOptionsMiddleware', 
] 

ROOT_URLCONF = 'ihc_data.urls' 

TEMPLATES = [ 
    { 
     'BACKEND': 'django.template.backends.django.DjangoTemplates', 
     'DIRS': [], 
     'APP_DIRS': True, 
     'OPTIONS': { 
      'context_processors': [ 
       'django.template.context_processors.debug', 
       'django.template.context_processors.request', 
       'django.contrib.auth.context_processors.auth', 
       'django.contrib.messages.context_processors.messages', 
      ], 
     }, 
    }, 
] 

WSGI_APPLICATION = 'ihc_data.wsgi.application' 


# Database 
# https://docs.djangoproject.com/en/1.10/ref/settings/#databases 

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.sqlite3', 
     'NAME': 'mydatabase', 
    } 
} 

# Password validation 
# https://docs.djangoproject.com/en/1.10/ref/settings/#auth-password-validators 

AUTH_PASSWORD_VALIDATORS = [ 
    { 
     'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', 
    }, 
    { 
     'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', 
    }, 
    { 
     'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', 
    }, 
    { 
     'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', 
    }, 
] 


# Internationalization 
# https://docs.djangoproject.com/en/1.10/topics/i18n/ 

LANGUAGE_CODE = 'en-us' 

TIME_ZONE = 'UTC' 

USE_I18N = True 

USE_L10N = True 

USE_TZ = True 


# Static files (CSS, JavaScript, Images) 
# https://docs.djangoproject.com/en/1.10/howto/static-files/ 

STATIC_URL = '/static/' 
STATIC_ROOT = os.path.join(BASE_DIR, '../static/') 

Nginx Сайты-Доступные

upstream app_server { 
    server unix:/home/urban/run/gunicorn.sock fail_timeout=0; 
} 

server { 
    listen 80; 

    # add here the ip address of your server 
    # or a domain pointing to that ip (like example.com or www.example.com) 
    server_name 138.197.19.209; 

    keepalive_timeout 5; 
    client_max_body_size 4G; 

    access_log /home/urban/logs/nginx-access.log; 
    error_log /home/urban/logs/nginx-error.log; 

    location /static/ { 
     alias /home/urban/static/; 
    } 

    # checks for static file, if not found proxy to app 
    location/{ 
     try_files $uri @proxy_to_app; 
    } 

    location @proxy_to_app { 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_set_header Host $http_host; 
     proxy_redirect off; 
     proxy_pass http://app_server; 
    } 
} 

Nginx Журнал ошибок (образец)

2016/12/10 17:41:52 [error] 12773#12773: *52 open() "/home/urban/static/img/projects.png" failed (2: No such file or directory), client: 24.11.95.201, server: 138.197.19.209, request: "GET /static/img/projects.png HTTP/1.1", host: "138.197.19.209", referrer: "http://138.197.19.209/vizes/Projects" 
2016/12/10 17:41:55 [error] 12773#12773: *54 open() "/home/urban/static/img/savings.png" failed (2: No such file or directory), client: 24.11.95.201, server: 138.197.19.209, request: "GET /static/img/savings.png HTTP/1.1", host: "138.197.19.209", referrer: "http://138.197.19.209/vizes/Projects" 
2016/12/10 17:41:55 [error] 12773#12773: *52 open() "/home/urban/static/img/projects.png" failed (2: No such file or directory), client: 24.11.95.201, server: 138.197.19.209, request: "GET /static/img/projects.png HTTP/1.1", host: "138.197.19.209", referrer: "http://138.197.19.209/vizes/Projects" 
2016/12/10 17:41:55 [error] 12773#12773: *55 open() "/home/urban/static/img/project_savings.png" failed (2: No such file or directory), client: 24.11.95.201, server: 138.197.19.209, request: "GET /static/img/project_savings.png HTTP/1.1", host: "138.197.19.209", referrer: "http://138.197.19.209/vizes/Projects" 

Chrome Инструменты разработчика консоли (на всякий случай)

loadScript @ tableau-2.js:28(anonymous function) @ tableau-2.js:32(anonymous function) @ tableau-2.js:33 
Projects:94 GET http://138.197.19.209/static/img/projects.png 404 (Not Found) 

ответ

1

Общий перечень я использую это:

  1. Убедитесь, что файлы находятся в каталоге:

    ls -lah /home/urban/static/img/projects.png 
    
  2. Убедитесь, что файлы в этом каталоге могут быть прочитаны пользователем nginx:

    # Note we are making these files world-readable here 
    # alternatives are to use a common gunicorn/nginx user 
    # or to use a group for both the nginx & gunicorn users. 
    chmod 0755 /home/urban 
    find /home/urban/static -type d -exec chmod a+rx {} \; 
    find /home/urban/static -type f -exec chmod a+r {} \; 
    
  3. Если файлы не существуют в (1), убедитесь, что вы выполнили команду управления collectstatic. Он будет копировать все static подкаталогов из вашего INSTALLED_APPS и скопировать их в STATIC_ROOT

+0

Brilliant, спасибо! Я думаю, не все файлы в каталоге были прочитаны nginx. – cpett