2017-07-23 54 views
1

當部署我的Joomla組件我放入數據庫的更新文件。即使數據庫沒有更改。這是必要的嗎?每個版本的SQL更新文件和什麼是內容

AND:什麼是內容?我是否必須僅將這些SQL語句用於從版本3到版本4的更改,還是必須還有版本1和版本2的更改?

問候 DreiBaer

回答

1

我已經做了一些測試,它看起來並不像你需要一個版本的組件,並不需要做任何數據庫變化的SQL更新文件。但是,在舊的Joomla版本中,情況可能並非如此,請參閱下文。

當你安裝您的組件上不已經有一個版本的組件的Joomla網站,其上運行的唯一的SQL文件是一個在你的清單文件的install節點引用。該文件可能類似於sql/install.mysql.utf8.sql

只要網站沒有你的組件的任何版本,那麼,即使你是安裝更高版本如2.3.1,而這個新版本確實有一些SQL更新文件,這些文件將不會執行,只有該版本的安裝文件(2.3.1)。但是,在這種情況下,SQL更新文件不會執行,它們的版本號會被解析,並且最大的版本號將存儲在Joomla的模式表中的組件中。例如,如果組件的2.3.1版包含SQL更新文件0.0.1.sql,1.0.1.sql,1.2.1.sql和2.0.4.sql,那麼在第一次安裝此組件時,模式表將具有2.0.4的version_id。

更新組件安裝SQL文件不會執行。 Joomla檢查安裝的組件的架構版本,然後按順序執行架構版本號大於安裝的架構版本號的每個SQL更新文件。例如,如果您安裝了組件並且它的模式版本爲1.5.2,並且您的更新包含SQL更新文件1.4.1,1.5.0,1.5.2,1.5.19和1.6.0,則僅限於SQL腳本1.5.19和1.6.0以該順序執行。

如果您安裝的第一次一個組件,它沒有更新文件,然後將模式表中包含一個空白VERSION_ID場的紀錄。如果您隨後使用包含SQL更新文件的版本更新該組件,則原始模式版本將計算爲零,並且將執行所有更新文件。

總之這是什麼意思,是爲組件的每個版本的SQL安裝文件必須擁有所有必要的SQL語句來獲取數據庫到正確的狀態,爲您的組件版本。在安裝時,即使安裝了更高版本的組件,也不會運行更新,因此可以用來操縱數據庫的唯一SQL是安裝文件中的SQL。

因此,您的組件可以正確升級,您必須有SQL更新文件,可以採取無論安裝的版本是由您試圖更新到版本。例如,如果管理員在更新組件時落後了,並且他們安裝了1.0.0版本並且希望直接更新到最新版本(如4.0.0),那麼4.0.0版本需要包含從1到2的更新,2至3,3至4以及之間的任何破壞。

Joomla的文檔中有this old article,它詳細討論了你所問的問題,但是它的過時(對於版本2.5),我認爲信息不再準確。

本文指出,對於沒有任何SQL更新的版本,必須有空白的SQL更新文件,否則後續更新SQL更新文件將不會執行,但是我已經測試過這個,似乎是一個問題。這在舊版本的Joomla中可能是正確的,但是與我在(3.5.7)上測試的版本不一樣。

它可能是最好的實踐,堅持文檔中描述的約定 - 包括空的SQL更新文件,因爲它不會傷害,並且我在測試中發現的行爲是未記錄的,將來可能會更改而不會發出警告。

該文檔還指出,組件版本需要與更新SQL文件版本匹配,但我再次發現這不再正確。您可以使用完全獨立於組件版本的SQL模式版本控制,而不會有任何問題。然而,再次保持架構和組件版本彼此同步可能是一個好主意 - 我想不出爲什麼你不這樣做的好理由。

相關問題