我正在关注Ken Cochrane对Seamless deployment of Django to single server问题的回答。我基本上运行了两台生产服务器,一台primary
和一台fallback
,我的 nginx 配置如下(省略不必要的细节):
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 更新?(我对零停机时间很感兴趣,这就是两服务器模型吸引我的原因。)