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