2016-05-29 2 views
3

Я пытаюсь скомпилировать статический файл с django-pipeline, но не могу обслуживать статические в dev режиме. Поскольку я не разработчик Django, я могу ошибаться, когда Django обслуживает статические файлы. Вот моя структура проекта:Django-pipe не обслуживает файлы в режиме разработки

  • проект (сам проект)
    • проекта (настройки, глобальные адреса конфигурации и т.д.)
    • приложение (основной и единственное приложение)
      • статические (основанные на приложении статические файлы, именуемые через имя приложения Папка)
    • статический (общий статический, который не связан с конкретным приложением)
      • CSS
        • app.styl
    • общественного
      • media
      • статический (не используется в dev env; только для производства: должно быть подано с Nginx, генерируется автоматически с помощью collectstatic)

Как я использую общий статический, я указал STATICFILES_DIRS директиву, чтобы позволить Django DEV сервер и collectstatic команда, чтобы найти общий статический:

STATICFILES_DIRS = [ 
    os.path.join(BASE_DIR, 'static'), 
] 

Вот мой settings.py:

# for production, should be served via nginx 
STATIC_ROOT= os.path.join(BASE_DIR, 'public/static/') 
# prefix for static app 
STATIC_URL = '/static/' 

# also django-pipeline config 
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder', 
    'django.contrib.staticfiles.finders.AppDirectoriesFinder', 
    'pipeline.finders.PipelineFinder', 
) 
STATICFILES_STORAGE = 'pipeline.storage.PipelineCachedStorage' 

PIPELINE = { 
    'PIPELINE_ENABLED': True, 
    'COMPILERS': (
     'pipeline.compilers.stylus.StylusCompiler', 
    ), 
    'STYLESHEETS': { 
     'app': { 
      'source_filenames': (
       'css/app.styl', 
      ), 
      'output_filename': 'css/app.css', 
     }, 
    }, 
} 

В моем шаблоне я указал CSS-группа:

{% load pipeline %} 
    {% stylesheet 'app' %} 
</head> 

В результате такой HTML генерируется:

<link href="/static/css/app.css" rel="stylesheet" type="text/css" /> 
</head> 

Но /static/css/app.css возвращает 404.

Если я бегу collectstatic, public/static/css/app.css встроен. Но поскольку я понимаю логику Django, она используется только для производства apache/nginx, а не в dev. В режиме dev режим статический подается через внутренний сервер Django с некоторыми промежуточными связями django-конвейера.

Что я делаю неправильно? Любая помощь приветствуется, спасибо.

UPD: Я добавил + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) к глобальным urlpatterns, однако, не может понять, что именно поэтому рекомендуется - STATIC_ROOT используется только для производства с внешним прокси-сервера, а не с самого Джанго. Или нет?

+0

Если я устанавливаю 'PIPELINE_ENABLED ': False,' Django собирает статические автоматически каждый раз, когда я нахожу HTTP-запрос в dev-mode. Это нормально? – f1nn

ответ

4

Для всех, борющихся с той же проблемой. Просто удалите 'PIPELINE_ENABLED': True, вдали от конфигурации django-конвейера. После этого django-pipe будет перекомпилировать статические данные для каждого запроса в режиме dev.

И перед развертыванием просто запустите collectstatic и установите DEBUG=False, как указано в документах. После того, как этот конвейер прекратит перекомпилировать файлы для каждого запроса, загрузите миниатюрные активы в шаблоны, и вы сможете обслуживать статические данные с STATIC_ROOT с любым прокси-сервером третьей части, таким как NGINX.

Смежные вопросы