也可以看看
有關(guān)使用的簡介django.contrib.staticfiles,請參閱 管理靜態(tài)文件(例如,圖像,JavaScript,CSS)。
將靜態(tài)文件投入生產(chǎn)的基本概述包括兩個步驟:collectstatic更改靜態(tài)文件時運行命令,然后安排將收集的靜態(tài)文件目錄(STATIC_ROOT)移至靜態(tài)文件服務(wù)器并提供服務(wù)。根據(jù) STATICFILES_STORAGE,可能需要手動將文件移動到新位置,否則類的post_process方法Storage可能會解決這個問題。
當(dāng)然,與所有部署任務(wù)一樣,細(xì)節(jié)在于魔鬼。每個生產(chǎn)設(shè)置都會有所不同,因此您需要調(diào)整基本輪廓以適合您的需求。以下是一些可能有用的常見模式。
如果要從已經(jīng)為您的站點提供服務(wù)的同一臺服務(wù)器提供靜態(tài)文件,則該過程可能類似于:
您可能希望自動化此過程,尤其是當(dāng)您有多個Web服務(wù)器時。
大多數(shù)較大的Django站點使用單獨的Web服務(wù)器(即未同時運行Django的Web服務(wù)器)來提供靜態(tài)文件。該服務(wù)器通常運行其他類型的Web服務(wù)器-速度更快,但功能較少。一些常見的選擇是:
配置這些服務(wù)器不在本文檔的討論范圍內(nèi)。檢查每個服務(wù)器各自的文檔以獲取指示。
由于您的靜態(tài)文件服務(wù)器不會運行Django,因此您需要修改部署策略,使其類似于:
另一個常見的策略是為來自Amazon S3和/或CDN(內(nèi)容交付網(wǎng)絡(luò))等云存儲提供商的靜態(tài)文件提供服務(wù)。這使您可以忽略提供靜態(tài)文件的問題,并且通常可以使網(wǎng)頁加載速度更快(尤其是在使用CDN時)??。
使用這些服務(wù)時,基本工作流程看起來與上面類似,除了rsync需要將靜態(tài)文件傳輸?shù)酱鎯μ峁┏绦蚧駽DN 而不是用于將靜態(tài)文件傳輸?shù)椒?wù)器之外。
您可以通過多種方式執(zhí)行此操作,但是如果提供程序具有API,則可以使用自定義文件存儲后端 將CDN與Django項目集成。如果您已經(jīng)編寫或正在使用第三方的自定義存儲后端,則可以collectstatic通過設(shè)置STATICFILES_STORAGE存儲引擎來告訴您使用它。
例如,如果您已經(jīng)編寫了一個S3存儲后端,則 myproject.storage.S3Storage可以將其用于:
STATICFILES_STORAGE = 'myproject.storage.S3Storage'
完成此操作后,所有您需要做的就是運行collectstatic,您的靜態(tài)文件將通過存儲包推送到S3。如果以后需要切換到其他存儲提供商,則只需更改STATICFILES_STORAGE設(shè)置即可。
有關(guān)如何編寫這些后端之一的詳細(xì)信息,請參閱《 編寫自定義存儲系統(tǒng)》。有可用的第三方應(yīng)用程序為許多常用文件存儲API提供存儲后端。djangopackages.org的概述是一個很好的起點。
有關(guān)其中包含的所有設(shè)置,命令,模板標(biāo)記和其他部分的完整詳細(xì)信息django.contrib.staticfiles,請參見staticfiles參考。
更多建議: