摘 要:drupal系統(tǒng)目錄下模塊可以放在很多目錄下,drupal會按照一定的次序掃描所有的符合規(guī)范的目錄下的模塊。但是并不意味著可以隨意放置模塊,比如系統(tǒng)的modules目錄下放的都是核心自帶的模塊,為了以后的升級方便,則不應該將模塊放在/modules目錄里面,本文就drupal的模塊放置問題做出了詳細的闡述分析。
關鍵詞:多站點;單站點;目錄組織;drupal
中圖分類號:TP311.52
1 多站點模式
假設建站方式是以Drupal多站點方式運作的,通過多個網(wǎng)站共享一套Drupal代碼,這時我們的第三方模塊一般都放在/sites/all/modules目錄。而其他模塊則分網(wǎng)站放到/sites/網(wǎng)站名/modules目錄下,如果你的自定義模塊想要跨多站共享的話,也需要放到/sites/all/modules里,這時為了區(qū)分,你需要在/sites/all/modules目錄里建子目錄,例如contrib代表第三方模塊目錄,custom代表自定義共享模塊目錄。
當然Drupal多站點其實還有一種不共享代碼,只共享數(shù)據(jù)庫的情況,但這與本文要討論的主題無關,就不做過多說明了。
2 單站點模式
單站點模式是最常見的情況,主要就是要用一套Drupal代碼建一個站,如果是一個比較大型的網(wǎng)站,需要使用的模塊眾多,則就需要做一些規(guī)劃了,在實際開發(fā)過程中,可以通過以下分析具體實現(xiàn)。(下文的目錄都放在/sites/all/modules目錄下,以保證/sites目錄下的站點目錄干凈清爽)
contrib
毫無疑問,這個目錄是放置第三方模塊的。
custom_contrib
放置的也是第三方模塊,但是有一點點與實際的需求不符,又沒有提供足夠的鉤子做擴展,所以實現(xiàn)就需要硬編碼了,放在這個目錄可以提醒哪些模塊是被修改過的,升級時要多加小心,不要遺漏之前打過的補丁。
custom
用于存放自定義模塊。
features
存放我們經過規(guī)劃從后臺導出的一批features,每個feature一般是要圍繞一個功能特性進行打包,不過如何規(guī)劃features每個人可能有不同的理解,只要能有清晰的思路,并且以后便于維護即可。
development
存放所有開發(fā)相關,而與網(wǎng)站業(yè)務邏輯無關的模塊,比如devel, schema等,這些模塊也不一定是只能在本地使用,但一般是不建議在生產服務器啟用的,將這些模塊放在一起,對生產服務器的問題排查和優(yōu)化有一定的幫助。
localhost
這是一個特殊的目錄,里面存放的是不放入版本控制的模塊,可以是第三方模塊,也可以是自定義模塊,實際操作時可以在里面繼續(xù)細分一些子目錄,但localhost目錄則需要根據(jù)版本控制軟件設置目錄的ignore屬性,這樣不管里面放了多少代碼都不會因為誤操作上傳到代碼庫。
3 第三方模塊
之所以有第三方模塊放到localhost是因為在團隊開發(fā)過程中,不能任意的提交模塊到版本庫,而有些開發(fā)相關的模塊對本地開發(fā)又很有幫助,所以可以將版本庫里沒有,但對實現(xiàn)有用,對其它未必有用的第三方模塊,主要是開發(fā)相關的模塊,放到localhost下,以提高本地開發(fā)調試效率。
4 自定義模塊
自定義模塊放到localhost當然也是不希望代碼被上傳到版本庫,但有這樣的自定義模塊的意義當然也是為了本地開發(fā)效率的提高,這也是一些開發(fā)相關的模塊,但大多數(shù)情況下,都是對業(yè)務邏輯和數(shù)據(jù)做一些CRUD,比如一鍵插入刪除測試數(shù)據(jù),比如一鍵刪除近期測試用戶等等,這對本地開發(fā)效率有極大的提升,或者可以保證本地數(shù)據(jù)庫的精簡。
not_in_use
這個目錄里的模塊來自于custom目錄,因為一些自定義的模塊可能因為某些原因,比如需求變更,模塊功能不再需要,這時如果封裝良好的話,需要把模塊禁用掉,但由于自定義代碼里包含許多業(yè)務邏輯,刪除肯定不是一個好辦法,以后可能需要把這個功能拿回來重新使用,或者需要參考里面的代碼,所以實際會需要把這樣的模塊放到一個單獨的目錄,從而哪些模塊正在被使用,哪些模塊目前已經不用了,就是一目了然的了。
5 Drupal模塊的存儲性能
眾所周知,drupal的核心部分是node,也是數(shù)據(jù)庫性能的關鍵之處,隨著內容的不斷增長,node數(shù)據(jù)集就會變得較為龐大,尤其是當drupal包含多種內容類型,也就是多種nodetype,Node的存儲問題就變得尤為嚴重,Drupal6和Drupal7基本差不多,隨著網(wǎng)站的數(shù)據(jù)增長,都會遇到類似的問題。同時,有些模塊,也會以把一些其他內容擴展到node的存儲中,如content_profile, 把profile存儲到node中,taxonomy_node把一個term也存儲到node中等等。
這樣的結果就是node數(shù)據(jù)會不斷的增長,變得巨大而不易維護和管理,數(shù)據(jù)存儲的性能問題會逐漸成為整個網(wǎng)站的瓶頸。
多站點的模式是把每一種類型的node單獨存儲,這樣,與把所有node都存儲在一個中心的情況相比,存儲的壓力會大大減小,從而提高網(wǎng)站的水平擴展性,解決了單站點的drupal性能問題。
一般來說,不要用content_profile等模塊,假如有1萬用戶,如果一個用戶有5個profile,那么就會給node表增加5萬條數(shù)據(jù),如果是一個以用戶為中心的網(wǎng)站,那么用戶的profile就會很大,并且content_profile的查詢效率比較低,至少需要關聯(lián)3個表的查詢。如果把每種nodetype單獨存儲,那content_profile也算是一種node類型,也很好的解決了content_profile模塊的使用問題。
具體方式是首先把用戶獨立出來,做一個user站點。這個站點可以使用content_profile,可以把所有的用戶信息都存儲在node中。
接下來,可以把所有數(shù)據(jù)較大的node類型分開到不同站點中,比如story站,比如page站,這些站點通過drupal的multiple站點的架構共享user站的用戶信息,如user表,role表等。
6 總結
從以上目錄劃分可以看出,就是在通過多放幾個子目錄讓代碼結構,主要是模塊結構,變得更有條例,在實際項目中,由于業(yè)務邏輯的不同,絕對相信大家有需要新建除了上文提到目錄以外的其他目錄,而且根據(jù)項目大小的不同,以上的目錄建議也不是都必須存在的,大家可以根據(jù)實際情況進行調整。
總之由于網(wǎng)站一般都需要長期維護,而隨著時間的推移很多項目相關的信息你可能都有所遺忘,因此我們開發(fā)過程中總要想一些辦法讓今后項目可以比較容易的理解和維護,從小的方面是代碼符合規(guī)范,注釋良好,代碼精煉易懂,從大的方面就是項目的目錄結構,技術架構,文檔,任務管理等等。
參考文獻:
[1]張志剛.用Drupal多站點架構來解決Drupal存儲的性能問題[J].計算機研究與發(fā)展,2012.
[2]邱暉.漫談Drupal性能優(yōu)化[J].計算機工程與應用,2013.
[3]彭波.Varnish構建高負載Drupal網(wǎng)站[J].電腦知識與技術,2012.
[4]李貝.DRUPAL系統(tǒng)A/BTEST解決方案[J].電子世界,2012.
作者簡介:陳浩(1979.9-),男,廣州人,講師,實驗師,碩士,主要從事計算機網(wǎng)絡技術的研究與應用。