**在產品環境中提供靜態文件服務**
將靜態文件部署在產品環境中的基本思路很簡單:當靜態文件改變時,就運行**collectstatic**命令,然后將整理后的靜態文件目錄(**STATIC_ROOT**)移動至靜態文件服務器中并托管。基于**STATICFILES_STORAGE**的不同,文件可能需要手工移至新的位置,或者由**Storage**類的**post_process**方法做相應的處理
當然,和所有的部署任務一樣,細節是各種復雜。每一個產品環境都有一些不同,所以你將這個基本思路調至符合你的需要。下面是一些常見情況,也許會有幫助。
**由專用服務器托管靜態文件**
大多數大型Django網站,使用一個分離的Web服務器來托管靜態文件 -- 這個服務器并不運行Django。這種服務器通常運行一個不同類型的Web服務 -- 更快,但是功能不全面。通常的選擇就是:
* Nginx
* Apache的一個簡易版本
配置這些服務器超出了本文檔范圍,可以查看各個服務器自己的文檔介紹。
因為你的靜態文件服務器并不運行Django,你需要改變部署策略,大概變成這樣:
* 當靜態文件改變時,本地運行**collectstatic**
* 將你本地的**STATIC_ROOT**目錄推送至靜態文件服務器的相應目錄下。rsync是完成該步驟的常見選擇,因為它每次只需要傳輸改變的部分。
下面是fabfile的大致處理過程:
~~~
from fabric.api import *
from fabric.contrib import project
# Where the static files get collected locally. Your STATIC_ROOT setting.
env.local_static_root = '/path/to/static'
# Where the static files should go remotely
env.remote_static_root = '/home/www/static.example.com'
@roles('static')
def deploy_static():
local('./manage.py collectstatic')
project.rsync_project(
remote_dir=env.remote_static_root,
local_dir=env.local_static_root,
delete=True,
)
~~~