在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Python/ 部署靜態(tài)文件
編寫自定義存儲(chǔ)系統(tǒng)
高級(jí)
編寫你的第一個(gè)Django應(yīng)用,第5部分
視圖層
Django管理文檔生成器
編寫你的第一個(gè) Django 程序 第3部分
編寫你的第一個(gè)Django應(yīng)用,第6部分
模型層
中間件
測試
數(shù)據(jù)庫訪問優(yōu)化
文件上傳
中間件
驗(yàn)證器
基于類的內(nèi)建通用視圖
部署靜態(tài)文件
使用Django認(rèn)證系統(tǒng)
高級(jí)教程:如何編寫可重用的應(yīng)用
Model 類參考
Django 初探
使用Django輸出PDF
模型的實(shí)例
模型
文件上傳
進(jìn)行原始的sql查詢
面向程序員
中間件
編寫數(shù)據(jù)庫遷移
TemplateResponse 和 SimpleTemplateResponse
異常
Django中的測試
基礎(chǔ)
管理器
File對象
URL調(diào)度器
加密簽名
國際化和本地化
日志
查詢集
django-admin 和 manage.py
使用基于類的視圖處理表單
聚合
內(nèi)建基于類的視圖的API
如何使用會(huì)話
部署 Django
其它
其它核心功能
高級(jí)
Django中的密碼管理
模型元選項(xiàng)
按需內(nèi)容處理
查找 API 參考
高級(jí)
Django 的快捷函數(shù)
Django 的設(shè)置
Admin
開發(fā)過程
新手入門
基于類的視圖
模型實(shí)例參考
信號(hào)
表單素材 ( <code>Media</code> 類)
自定義查找
常見的網(wǎng)站應(yīng)用工具
模型
django.contrib.humanize
Django模版語言
點(diǎn)擊劫持保護(hù)
管理操作
編寫你的第一個(gè) Django 程序 第2部分
Django安全
模式編輯器
多數(shù)據(jù)庫
部署
基于類的視圖
內(nèi)建的視圖
視圖裝飾器
面向設(shè)計(jì)師
編寫視圖
應(yīng)用程序
如何使用WSGI 部署
參考
表單 API
文件儲(chǔ)存API
認(rèn)證
國際化和本地化
錯(cuò)誤報(bào)告
基礎(chǔ)
基礎(chǔ)
將遺留數(shù)據(jù)庫整合到Django
教程
Django異常
編寫你的第一個(gè) Django 程序 第4部分
遷移
分頁
重定向應(yīng)用
表單
從零開始
為模型提供初始數(shù)據(jù)
設(shè)置
使用Django輸出CSV
關(guān)聯(lián)對象參考
使用表單
Django 中的用戶認(rèn)證
快速安裝指南
安全問題歸檔
數(shù)據(jù)庫函數(shù)
編寫自定義的django-admin命令
高級(jí)教程
管理文件
格式本地化
基于類的通用視圖 —— 索引
安全
系統(tǒng)檢查框架
為Django編寫首個(gè)補(bǔ)丁
模板層
Widgets
編寫你的第一個(gè) Django 程序 第1部分
執(zhí)行查詢

部署靜態(tài)文件

另見

django.contrib.staticfiles 的用法簡介,請參見管理靜態(tài)文件(CSS、images)

在線上環(huán)境部署靜態(tài)文件

放置靜態(tài)文件到線上環(huán)境的基本步驟很簡單:當(dāng)靜態(tài)文件改變時(shí),運(yùn)行collectstatic 命令,然后安排將收集好的靜態(tài)文件的目錄(STATIC_ROOT) 搬到靜態(tài)文件服務(wù)器上。取決于STATICFILES_STORAGE,這些文件可能需要手工移動(dòng)到一個(gè)新的位置或者Storage 類的post_process 方法可以幫你。

當(dāng)然,與所有的部署任務(wù)一樣,魔鬼隱藏在細(xì)節(jié)中。每個(gè)線上環(huán)境的建立都會(huì)有所不同,所以你需要調(diào)整基本的綱要以適應(yīng)你的需求。下面是一些常見的方法,可能有所幫助。

網(wǎng)站和靜態(tài)文件位于同一臺(tái)服務(wù)器上

如果你的靜態(tài)文件和網(wǎng)站位于同一臺(tái)服務(wù)器,流程可能像是這樣:

  • 將你的代碼推送到部署的服務(wù)器上。
  • 在這臺(tái)服務(wù)器上,運(yùn)行collectstatic 來收集所有的靜態(tài)文件到STATIC_ROOT
  • 配置Web 服務(wù)器來托管URLSTATIC_URL下的STATIC_ROOT。 例如,這是如何使用Apache 和mod_wsgi 來完成它。

你可能想自動(dòng)化這個(gè)過程,特別是如果你有多臺(tái)Web 服務(wù)器。有許多種方法來完成這個(gè)自動(dòng)化,但是許多Django 開發(fā)人員喜歡 Fabric。

在一下的小節(jié)中,我們將演示一些示例的Fabric 腳本來自動(dòng)化不同選擇的文件部署。Fabric 腳本的語法相當(dāng)簡單,但這里不會(huì)講述;參見Fabric 的文檔 以獲得其語法的完整解釋。

所以,一個(gè)部署靜態(tài)文件來多臺(tái)Web 服務(wù)器上的Fabric 腳本大概會(huì)是:

from fabric.api import *

# Hosts to deploy onto
env.hosts = ['www1.example.com', 'www2.example.com']

# Where your project code lives on the server
env.project_root = '/home/www/myproject'

def deploy_static():
    with cd(env.project_root):
        run('./manage.py collectstatic -v0 --noinput')

靜態(tài)文件位于一臺(tái)專門的服務(wù)器上

大部分大型的Django 站點(diǎn)都使用一臺(tái)單獨(dú)的Web 服務(wù)器來存放靜態(tài)文件 —— 例如一臺(tái)不運(yùn)行Django 的服務(wù)器。這種服務(wù)器通常運(yùn)行一種不同類型的服務(wù)器 —— 更快但是功能很少。一些常見的選擇有:

配置這些服務(wù)器在這篇文檔范圍之外;查看每種服務(wù)器各自的文檔以獲得說明。

既然你的靜態(tài)文件服務(wù)器不會(huì)允許Django,你將需要修改的部署策略,大概會(huì)是這樣:

  • 當(dāng)靜態(tài)文件改變時(shí),在本地運(yùn)行collectstatic。
  • 將你本地的STATIC_ROOT 推送到靜態(tài)文件服務(wù)器相應(yīng)的目錄中。在這一步,常見的選擇rsync ,因?yàn)樗粋鬏旍o態(tài)文件改變的部分。

下面是Fabric 腳本大概的樣子:

from fabric.api import *
from fabric.contrib import project

# Where the static files get collected locally. Your STATIC_ROOT setting.
env.local_static_root = '/tmp/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
    )

靜態(tài)文件位于一個(gè)云服務(wù)或CDN 上

兩位一個(gè)常見的策略是放置靜態(tài)文檔到一個(gè)云存儲(chǔ)提供商比如亞馬遜的S3 和/或一個(gè)CDN(Content Delivery Network)上。這讓你可以忽略保存靜態(tài)文件的問題,并且通??梢约涌炀W(wǎng)頁的加載(特別是使用CDN 的時(shí)候)。

當(dāng)使用這些服務(wù)時(shí),除了不是使用rsync 傳輸你的靜態(tài)文件到服務(wù)器上而是到存儲(chǔ)提供商或CDN 上之外,基本的工作流程和上面的差不多。

有許多方式可以實(shí)現(xiàn)它,但是如果提供商具有API,那么自定義的文件存儲(chǔ)后端 將使得這個(gè)過程相當(dāng)簡單。如果你已經(jīng)寫好或者正在使用第三方的自定義存儲(chǔ)后端,你可以通過設(shè)置STATICFILES_STORAGE 來告訴collectstatic 來使用它。

例如,如果你已經(jīng)在myproject.storage.S3Storage 中寫好一個(gè)S3 存儲(chǔ)的后端,你可以這樣使用它:

STATICFILES_STORAGE = 'myproject.storage.S3Storage'

一旦完成這個(gè),你所要做的就是運(yùn)行collectstatic,然后你的靜態(tài)文件將被你的存儲(chǔ)后端推送到S3 上。如果以后你需要切換到一個(gè)不同的存儲(chǔ)提供商,你只需簡單地修改你的STATICFILES_STORAGE 設(shè)置。

關(guān)于如何編寫這些后端的細(xì)節(jié),請參見編寫一個(gè)自定義的存儲(chǔ)系統(tǒng)。有第三方的應(yīng)用提供存儲(chǔ)后端,它們支持許多常見的文件存儲(chǔ)API。一個(gè)不錯(cuò)的入口是djangopackages.com 的概覽。

了解更多

關(guān)于django.contrib.staticfiles 中包含的設(shè)置、命令、模板標(biāo)簽和其它細(xì)節(jié),參見staticfiles 參考。

譯者:Django 文檔協(xié)作翻譯小組,原文:Deploying static files。

本文以 CC BY-NC-SA 3.0 協(xié)議發(fā)布,轉(zhuǎn)載請保留作者署名和文章出處。

Django 文檔協(xié)作翻譯小組人手緊缺,有興趣的朋友可以加入我們,完全公益性質(zhì)。交流群:467338606。