2013-06-22 1 views
0

Я следую за Ken Cochrane's answer на вопрос Seamless deployment of Django to single server. Я в основном работает два производственных серверов, один primary и один fallback, и мой Nginx сконфигурирован следующим образом (опуская несущественные детали):Обработка различных статических файлов между средами при развертывании обновлений для первичных/резервных серверов Django

upstream app-primary { 
    server localhost:12345; 
    server localhost:12346 backup; 
} 
server { 
    root /home/fraxtil/app/primary; 
    location /static/ { 
     alias /home/fraxtil/app/primary/static/; 
    } 
    location/{ 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_set_header Host $http_host; 
     proxy_redirect off; 
     proxy_pass http://app-primary; 
    } 
} 

При нажатии обновления, обновить fallback, затем отключить primary, обновление его и снова включите. Решение - это почти, но есть одна проблема: я использую django-compressor для сбора и сжатия моих CSS и JS-файлов, и у обоих экземпляров не гарантируется наличие одинаковых статических имен файлов. Таким образом, пока primary не работает, сервер fallback обрабатывает запросы приложений просто отлично, но nginx ищет статические файлы в /.../primary/static/ вместо /.../fallback/static/.

Есть ли способ решить эту проблему без маршрутизации статических запросов файлов через Django? В качестве альтернативы существует ли лучше способ беспрепятственного развертывания обновлений Django? (Мне интересно иметь нулевое время простоя, поэтому модель с двумя серверами заманила меня.)

ответ

0

Я нашел способ заставить его работать с помощью директивы try_files. На самом деле я пытался это прежде, чем отправить вопрос, но по какой-то причине моя первая попытка, предпринятая каждый запрос 404. Это, кажется, работает, хотя:

server { 
    # Moved the root up one level 
    root /home/fraxtil/app; 
    location /static/ { 
     # Try the primary instance's static folder, then the fallback's 
     try_files /primary/$uri /fallback/$uri =404; 
    } 
... 

Единственным недостатком здесь является то, что все запросы на несуществующие статические файлы ударят диск дважды, но это не должно быть слишком большой проблемой.