Moodle升級
此篇文章詳細解釋了如何升級Moodle。欲了解升級過程的總結請參閱升級概覽。
核驗要求
在管理>網站管理>伺服器>環境頁面核驗伺服器是否滿足2.7版本的所有要求。
注意:你只能從Moodle2.2之後的版本升級到2.7。如若想從2.2版本之前升級,那麼必須先升級到Moodle 2.2方可升級到2.7。
升級之前
我們建議先在生產站點的副本上進行升級,這樣可以確保升級後的站點如期正常工作。
主題
除了Clean主題,Moodle2.6(及之前)的所有標準主題已經從2.7移除了(參見[https://tracker.moodle.org/browse/MDL-43784 MDL-43784])。自定義主題和來自插件目錄的主題沒有受到影響,除非他們所使用的主題的父主題為被移除主題中的其中一個,他們就會受到影響。如若使用的主題被移除了,那麼升級後的主題將被復原到名為Clean的默認主題。
對於那些希望繼續使用被移除主題(或其父主題為移除主題)而不是Clean主題的站點,我們建議採用如下步驟:
- 下載Moodle2.7版本,但是先不要運行升級程序。
- 從Moodle插件目錄的主題部分(或從如下連結)下載2.7版本的主題到moodle/theme/。
- 運行升級程序。
升級之後有可能會將缺失的主題複製到Moodle,但在這之前任何用戶都不得使用系統,否則可能會遺失與主題相關聯的設置。
受影響的主題(及其下載連結)如下所示:
Afterburner | plugins db | github |
Anomaly | plugins db | github |
Arialist | plugins db | github |
Binarius | plugins db | github |
Boxxie | plugins db | github |
Brick | plugins db | github |
Formal White | plugins db | github |
Form Factor | plugins db | github |
Fusion | plugins db | github |
Leatherbound | plugins db | github |
Magazine | plugins db | github |
Nimble | plugins db | github |
Nonzero | plugins db | github |
Overlay | plugins db | github |
Serenity | plugins db | github |
Sky High | plugins db | github |
Splash | plugins db | github |
Standard | plugins db | github |
Standard old | plugins db | github |
注意:只有以附加組件形式安裝的主題可以在升級Moodle時自動升級,標準主題則不能。因為標準主題已經從2.7版本中移除了,必須重新添加才能使用。
升級問題引擎
Moodle 2.1時對問題引擎進行了一次重大檢修。如2.1版本的升級文檔說明一樣,可以推遲部分數據庫升級。在升級2.7之前,這個升級必須要完成。
若按下面的方法來,這將是行之有效的:
- 站點開始於版本2.0.x,而且
- 當需要升級至2.1或2.2時,需要使用複雜的技巧以推遲部分問題引擎的升級(如2.1版本的升級文檔說明一樣),
- 現在升級仍然沒有完成
……在把Moodle升級到2。7之前必須完成它。
可以通過站點底部的環境頁面進行查驗,提供你使用的版本為2.4.9, 2.5.5 or 2.6.2之後的版本。如有問題,將會在環境頁面上看到。如若沒有,說明已經成功了。
大多數人都不會被影響到。
備份重要數據
任何升級之前都應該備份的3處地方是:
- Moodle軟件(例如,伺服器/htdocs/moodle內的所有東西)
- Moodle上傳的文件(例如,伺服器/moodledata)
- Moodle數據庫(例如,Postgres或MySQL的數據庫轉儲(dump))
參閱站點備份獲取特殊信息。
置於站點為維護模式
開始升級之前需置於站點為維護模式以防止非管理員用戶登錄系統。
檢查附加組件更新
如已啟用自動更新部署功能,那麼已安裝的附加組件將會在升級期間獲得更新。確保已經在插件檢查頁面查驗了是否有可用更新(通過檢查更新按鈕)。
如是手動更新附加組件,那麼現在是檢查Moodle插件目錄下已安裝插件(包括主題)是否有2.7版本的好時候了。如有,下載附加組件軟件包。下一步需將其複製到Moodle代碼中合適的位置(參見安裝附加組件)。
附加組件的升級過程將會隨着Moodle升級而完成。
如果過期的附加組件致使升級失敗,那麼需要刪除過期的附加組件而不是卸載它,與之相關的數據也將被刪除。
安裝新的Moodle軟件
標準安裝包
- 移動舊版本的Moodle軟件程序到另一個位置。不要用新的文件覆蓋掉它。
- 將新的軟件包解壓到伺服器上之前放置舊版本的位置。在升級過程中,Moodle將會根據需要調整SQL和moodledata。
- 複製舊的config.php文件到新的Moodle目錄下。
- 如上所述,如果之前在站點安裝過任何自定義的附加組件,那麼現在就需要將其添加到新的代碼結構目錄里。查驗附加組件的版本是否與Moodle版本相吻合是非常重要的。尤其需要注意的是不要覆蓋掉新版本的任何代碼。
- 不要忘記複製moodledata文件夾到你的根(「/」)目錄。如若不複製的話,將會看到錯誤提示:「致命錯誤:$cfg- dataroot沒有正確的配置」。
Linux
mv moodle moodle.backup tar xvzf moodle-2.7.tgz接下來,複製整個config.php文件,任何自定義插件,如果創建了.htaccess文件的話也要複製(首先查驗自定義插件的版本是否與Moodle版本相吻合):
cp moodle.backup/config.php moodle不要忘記改變權限使Web伺服器有閱讀config.php文件(和其他源碼)的權限。理想情況下伺服器沒有編輯(寫)這個文件的權限。 如果使用Cron,需要小心的是cron.php是可執行的,需使用正確的PHP命令:cp -pr moodle.backup/theme/mytheme moodle/theme/mytheme cp -pr moodle.backup/mod/mymod moodle/mod/mymod
chmod 740 admin/cli/cron.php (一些配置需要其chmod 750或chmod 755) 从cron.php文件复制第一行代码 (如果第一行看起来像是'#!/usr/local/bin/php'或'#!/usr/local/bin/php5.3',则不需要复制'<?php')如果有必要的話。
使用Git
可以使用Git更新或升級你的Moodle。參閱管理員使用Git指導文檔獲取更多細節。
命令行升級
在Linux伺服器上,Moodle 2.7支持通過命令行的方式進行升級,而不是通過Web瀏覽器。這樣升級會更為可靠,尤其是對於大型站點來說。
完成升級
最後一步是在Moodle內部啟動升級過程。
訪問管理>網站管理>通告即可。
Moodle將會自動檢測新版本並執行全部所必要的數據庫系統或文件系統的升級。如若有些升級程序(非常少)不能自動完成,那麼你將會看到告知你該怎麼做的提示消息。
假設一切運轉良好(沒有錯誤消息),那麼現在你就可以使用新版本的Moodle,盡情享用新功能吧。
注意:如果是通過多台伺服器運行Moodle的話,那麼需要在所有伺服器上升級完成之後手動清除所有的緩存(通過管理>網站管理>開發>清除所有緩存)。
致命錯誤:超過30秒的最長執行時間……
如果伺服器使用非英語作為主語言,當你試圖升級系統時,可能會遇到一個「致命錯誤:超過30秒的最長執行時間」。可以通過增加php.ini內的最 長執行時間到160秒(max_execution_time = 160)以允許語言升級腳本有足夠的時間來處理。要不然的話,也可以在升級之前先將網站默認語言轉換為英語,升級成功之後再轉換回來。參閱討論區帖子——https://moodle.org/mod/forum/discuss.php?d=119598。
升級之後
安裝過程中設置的config.php文件應當可以正常運行,但是如果抽空看一眼Moodle2.7自帶的config-dist.php文件,那 里有更多(或不同)的可用選項供你選擇(如,數據庫驅動程序及設置)。將舊的config.php設置映射到基於2.7版本config- dist.php形成新的配置文件是一個不錯的主意。
Cron
Cron獲得了一個重大更新([https://tracker.moodle.org/browse/MDL-25499 MDL-25499]),現在可以同時支持計劃內和計劃外任務。
從這些改變獲得的溢出主要有:
- 每個計劃任務可以由管理員來配置
- 任務可以同時執行
- Cron流程使用鎖以防止同一任務在同一時間被不同進程所執行
- 帶有多個相同應用節點的集群已獲得支持,可以通過Cron運行他們
這些改變的結果就是Cron可以更為頻繁的執行,這意味着(例如)論壇帖子可以更快地發出。為更好地利用新的Cron系統,我們強烈建議管理員增加Cron運行的頻率到至少每分鐘一次。
可能還需要修正從Cron解析出的自動化腳本。不再可能通過Cron腳本輸出的字符串「Cron腳本已正確地完成」(如果這是你正在做的事情)而簡單的監視。另一個替代方案是監視輸出的字符串「任務失敗:」。如果檢測到任務失敗了,那麼這裏有一些供調試錯誤用的建議。
升級到2.7之前,如若有失敗的Cron腳本任務,系統會阻止執行剩餘的Cron腳本。單獨失敗的任務不再對其他Cron腳本的執行有任何影響,所以可通過此來發現之前標記的bug。這樣就可以在升級2.7之後密切監視Cron的輸出內容。
Before the upgrade to 2.7, there may have been a cron task that was failing, which was preventing the rest of cron from being executed. A failure in any single task will no longer prevent the rest of the Moodle cron tasks from executing, so you may uncover previously masked bugs. It is a good idea to closely monitor the output from cron after the upgrade to 2.7.
作業
舊版本的作業(2.2)模塊已經從核心代碼里移除了,取而代之的通過存根(stub)以支持透明的URL重映射並可以把舊版本模塊備份的課程還原到新版本。
如若還在使用舊版本的作業(2.2)模塊,Moodle升級到2.7之後,所有2.2版本的作業活動都將會被隱藏。需要運行作業升級工具以解除隱藏掉的活動。
如果你真的確實需要繼續使用舊版本的作業(2.2)模塊,還想把Moodle升級到2.7,那麼在升級之前請先從https://github.com/moodlehq/moodle-mod_assignment/releases下載一個文件夾以替換之前的"mod/assignment"文件夾。
If you really, really need to keep using the old assignment (2.2) module, you should update the code to Moodle 2.7, and then replace the "mod/assignment" folder with the one from https://github.com/moodlehq/moodle-mod_assignment/releases before completing the upgrade.
數學過濾器
隨Moodle 2.7升級到來的是一個基於MathJax的全新的數學過濾器。是現有Tex過濾器的替代品。MathJax過濾器對新站點是默認啟用的,但對升級的站點則默認不開啟。可能會需要禁用舊的Tex過濾器以啟用新的MathJax過濾器。那麼為了使用MathJax過濾器,有一些兼容性設置及其他選項需要調整。
Moodle 2.7可能出現的問題
目前還沒有,等待添加……
定製基於日誌的報告
Moodle 2.7已經將日誌功能移動到新的日誌記錄API,其使用更為詳盡、更為靈活的方式存儲日誌。升級之後,默認的日誌記錄不再存放於表「log」中。所有需要 訪問此表的標準報告和插件已經轉換到同時支持新的API及遺留的「log」表中去了。這樣的話就可以理解自定義的第三方插件不能即刻作出改變,也就不能向 「log」表寫入有意義的信息或申請訪問權限了。在這種情況下管理員需要啟用編輯遺留日誌的權限:網站管理>插件>日誌>遺留日誌:選擇「記錄遺留數據」。可能還需要禁用「標準日誌記錄」以防系統記錄雙份的日誌。
Moodle 2.3,2.4,2.5及2.6各版本的改善情況
升級到2.7之後都改善了什麼,這要依賴於是從哪個版本升級到2.7的,請參閱本文中「可能出現的問題」的部分: