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的,请参阅本文中“可能出现的问题”的部分: