2015-08-10 6 views
1

Я создал проект Django, развернутый на Heroku, используя Heroku Django project template. Шаблон Heroku использует whitenoise для сбора статических файлов в каталоге/static /, расположенном в корне моего проекта.Как отключить whitenoise для локальной разработки моего проекта Django?

Это замечательно для моей производственной среды; Heroku запускает «manage.py collectstatic» каждый раз, когда я нажимаю новые файлы на свой сервер. Тем не менее, это боль при разработке локально: каждый раз, когда я меняю свои статические файлы (например, css), мне приходится вручную запускать «python manage.py collectstatic» перед тем, как увидеть изменения на моем сервере разработки.

Есть ли простой способ отключить whitenoise на моей локальной машине, чтобы мне не приходилось запускать «python manage.py collectstatic» каждый раз, когда я хочу видеть изменения в локальных статических файлах?

Я попытался создать отдельный файл «development_settings.py» и удалить все ссылки на whitenoise в этом файле, но это не работает, потому что whitenoise по-прежнему ссылается на wsgi.py, что вызывает ошибки.

ответ

0

Хотя я не нашел простой способ отключить WhitENoise на моем сервере развития, я найти удобный обходной путь для создания всего этого процесса проще:

Добавить новую команду псевдоним для вашего .bash_profile файла (или бен/активировать, если вы используете виртуальную среду для развития), что и запускает collectstatic и запускает сервер одновременно:

alias launch='python manage.py collectstatic --noinput; foreman start' 
0

похоже, шаблон Heroku по умолчанию определяет старую версию WhitENoise. Если вы запустите

pip install --upgrade whitenoise 

вы должны найти его автоматически улавливает изменения в ваши статические файлы, когда в процессе развития (то есть, когда settings.DEBUG является True).

0

Текущая версия whitenoise автоматически подберет ваши статические файлы. Но это может замедлить запуск runserver совсем немного, так как он будет перебирать все статические файлы. Я исправил это, отключив whitenoise в runerver. Теперь мой wsgi.py выглядит следующим образом:

import os 
import sys 

from django.core.wsgi import get_wsgi_application 

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "...") 

application = get_wsgi_application() 

# guess whether this is a runserver invocation with staticfiles 
has_staticfiles = False 
if 'runserver' in sys.argv: 
    from django.conf import settings 
    import inspect 
    if settings.DEBUG: 
     has_staticfiles = any(
      "django/contrib/staticfiles/management/commands/runserver" 
      in x[1] 
      for x in inspect.stack()) 

if has_staticfiles: 
    print('runserver with staticfiles detected, skipping whitenoise') 
else: 
    # Do not use whitenoise with runserver, as it's slow 
    from whitenoise.django import DjangoWhiteNoise 
    application = DjangoWhiteNoise(application) 
0

WhitENoise имеет параметр, называемый WHITENOISE_AUTOREFRESH именно по этой причине.

От WhiteNoise Docs:

WHITENOISE_AUTOREFRESH: перепроверяет файловую систему, чтобы увидеть, если какие-либо файлы были изменены, прежде чем ответить. Это предназначено для использования в разработке, где удобно находить изменения в статических файлах без перезапуска сервера. По соображениям производительности и безопасности этот параметр не должен использоваться в производстве.

По умолчанию это значение settings.DEBUG, поэтому оно должно быть включено по умолчанию, если вы используете сервер разработки.