**在产品环境中提供静态文件服务**
将静态文件部署在产品环境中的基本思路很简单:当静态文件改变时,就运行**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,
)
~~~