9分钟阅读时间 (1733字)

以最小停机时间进行复杂的Joomla! 1.5迁移

Complex Joomla! 1.5 Migration With Minimal Downtime

Joomla 1.5项目已经不支持很长时间了。您仍然可以使用Joomla 1.5,但(安全)更新将不再发布。此外,Joomla 2和Joomla 3也有很多新功能和改进。也许您已经注意到了:一旦您使用Joomla 2或Joomla 3,管理Joomla 1.5网站的感觉真的很过时,您会注意到Joomla实际上已经取得了很大的进步。

您应该将Joomla 1.5网站迁移到Joomla项目目前支持的一个版本。不幸的是,由于各种原因,仍然有很多Joomla 1.5网站。没有时间、没有预算、没有动力、推迟等。

有时这是因为迁移的复杂性。最近需要迁移一个具有复杂条件的Joomla 1.5网站。这是一个巨大的挑战,我想分享我所获得的知识,以帮助您迁移任何可能拥有的复杂Joomla网站。

Joomla网站Exact Netherlands

Exact是一家领先的全球企业软件供应商,为小型和中型企业提供完整的ERP解决方案。Exact为制造、批发和分销、专业服务和会计等特定行业开发行业特定的本地和云解决方案。Exact已经使用Joomla为他们的一些网站服务了几年。Exact Netherlands网站由Joomla 1.5提供支持,需要迁移。

该网站是荷兰最大的Joomla网站之一,是Exact的主要营销、沟通和销售工具。Exact对稳定且始终可供访客访问的网站有很高的要求。因此,托管环境是完全冗余的。

许多内容编辑每天都在网站上工作,网站处于不断变化的状态。网站使用多个(自定义)扩展,并包含大量菜单项、文章和模块。

对迁移的强烈要求

对于迁移提出了强烈的要求:在1.5天内迁移网站,晚上允许的最大停机时间是两小时。预期结果是具有相同布局、功能、URL、菜单、文章等,但由Joomla 2.5驱动的网站。简而言之:访客不应在Joomla 1.5和Joomla 2.5版本的网站之间看到或体验到任何差异。

但您如何实现这一点?对Exact来说,“典型”的Joomla迁移(复制、迁移、纠正设置并上线)不是一个选项。这将花费太长时间,且迁移过程中的网站副本会很快过时。

典型的Joomla迁移

为了对迁移有一个良好的概述,项目从典型的迁移开始。为了迁移Joomla核心数据,我更倾向于使用扩展程序SP Upgrade。这个付费扩展程序安装在没有任何样本数据的全新Joomla 2.5安装中。所有1500篇文章、650个菜单项和950个模块都是通过这个扩展程序导入的。

该网站使用了几个第三方扩展程序,幸运的是,所有这些扩展程序都有Joomla 2.5版本。这些扩展程序通过将数据库表复制到Joomla 2.5数据库中进行迁移,这也可以通过SP Upgrade完成,然后安装扩展程序。扩展程序将检测过时的数据库结构并在需要时更新它们。对于模板,已经有一个可用的Joomla 2.5版本。

新功能和新设置

到目前为止,所有步骤都是典型Joomla迁移的一部分。网站数据已经迁移,但检查网站时,您会发现它还没有看起来像应该的那样。这通常是由Joomla与较旧版本相比的不同或新设置引起的。一个典型的例子是Joomla菜单模块。在Joomla 1.5中,您配置了显示0到3级,在Joomla 2.5中,您需要配置1到4级以实现相同的结果。在Joomla 2.5中,0级不再存在。

通常,您会检查所有这些设置,并在必要时进行调整。根据网站的大小,这可能需要几个小时甚至几天。一旦检查并调整完毕,网站就可以上线了。这是迁移中的主要问题,调整所有设置会花费太长时间,而且太不可预测了。

自定义迁移脚本

尽管如此,必须清楚需要哪些数据和设置调整,以确保Joomla 2.5版本与Joomla 1.5版本完全相同。不是通过Joomla界面进行更改,而是直接在数据库中进行更改,同时记录这些更改。

所有这些更改都已集成到一个定制的脚本中,该脚本由一组SQL查询组成。收集所有必要的调整需要花费时间,但一旦脚本完成,SQL查询将在几秒钟内执行。

菜单级别更改

让我们创建一个简单的自定义迁移脚本,并使用模块级别设置调整作为示例。创建一个名为“migrate.php”的文件,并将其放置在网站根目录下。在该文件中添加以下代码。该代码将更改ID为233、294和357的模块。这些模块的参数在循环中修改,然后保存到数据库中。ID为233的模块的“startLevel”从“2”更改为“3”。作为额外的示例,为ID为294的模块添加了“menutype”,并将ID为357的面包屑模块的“您在这里”文本设置为“隐藏”。

define('_JEXEC', 1);

// Connect with Joomla
define('JPATH_BASE', __DIR__);
require_once JPATH_BASE . '/includes/defines.php';
require_once JPATH_BASE . '/includes/framework.php';

// Database connection
$db = JFactory::getDBO();

/**
 * Module changes
 */
 
// Get the modules that need changes
$query = $db->getQuery(true);
$query->select('*')
	->from('#__modules')
	->where('id IN (233,294,357)');
$db->setQuery($query);
$modules = $db->loadObjectList('id');

foreach($modules as $module)
{
	$module->params = json_decode($module->params);
}

// Change startLevel
if ($modules[233]->params->startLevel == 2)
{
	$modules[233]->params->startLevel = 3;
	echo('Module [233]: startLevel: 3 
'); } // Set menutype if (empty($modules[294]->params->menutype)) { $modules[294]->params->menutype = 'mainmenu'; echo('Module [294]: menutype: mainmenu
'); } // Hide breadcrumb "You are here" if (!$modules[357]->params->showHere) { $modules[357]->params->showHere = 0; echo('Module [357]: showHere: 0
'); } // Save new module params foreach($modules as $id=>$module) { $params = json_encode($module->params); $mod = new JObject(); $mod->id = $id; $mod->params = $params; $result = $db->updateObject('#__modules', $mod, 'id'); }

完整脚本作为Gist: https://gist.github.com/sanderpotjer/9311435

扩展程序特定更改

与这种调整类似,可以在数据库的任何地方进行。对于ZOO扩展程序,所有项目都需要调整访问设置。由于迁移,项目不再可见,这显然不是预期结果。您可以将以下代码添加到迁移脚本中,以确保ZOO项目的访问设置在数据库中得到纠正。

/**
 * Component changes
 */
 
// ZOO access fixes
$query 		= $db->getQuery(true);
$fields 	= array('access=1');
$conditions = array('access=0');
$query->update($db->quoteName('#__zoo_item'))->set($fields)->where($conditions);
$db->setQuery($query);

$result = $db->query();
echo('ZOO: Access set to 1 
');

完整脚本作为Gist: https://gist.github.com/sanderpotjer/9311435

大幅缩短迁移时间

您可能可以想象,用于精确迁移的脚本最终会大得多,但以上内容为您提供了一个关于自定义迁移脚本强大功能的概览:您在Joomla后台通常为迁移所执行的所有操作,只需几秒钟即可完成,而不是数小时或数天。这极大地缩短了迁移所需的时间,这对于Exact荷兰网站的迁移来说是非常有用的。

迁移脚本的一个额外优势是,您可以重复测试和改进迁移,直到达到预期的结果。

Joomla 2.5基础

除了数据库更改外,通常还需要更改服务器文件,例如模板覆盖。这也将在测试过程中进行,并最终生成一个包含网站最终Joomla 2.5版本所需所有文件的Joomla 2.5基础安装。

为了对自定义迁移脚本进行充分测试,每次都使用Joomla 2.5基础安装的新副本。这样,迁移就得到了充分的准备,并且在最终迁移过程中消除了意外的惊喜。

大迁移日

经过几周的准备,我们终于迎来了最终的迁移日。进行了几次最后的测试迁移,并在域名的子文件夹中准备了Joomla 2.5基础安装。一切准备就绪,我们可以按照以下步骤进行网站的最终迁移:

  1. 备份Joomla 1.5网站
  2. 关闭Exact.nl (Joomla 1.5)网站
  3. 通过SP升级迁移Joomla核心数据(±1分钟)
  4. 将扩展表复制到Joomla 2.5数据库(±1分钟)
  5. Joomla 2.5网站中的操作(±2分钟)
    • 安装第三方扩展
    • 执行第三方扩展的升级脚本
    • 启动Joomla智能搜索的内容索引
    • 使用ACL管理器解决资产问题
  6. 执行自定义迁移脚本(±0.5分钟)
  7. 将Joomla 1.5网站文件移动到存档文件夹(±0.5分钟)
  8. 将Joomla 2.5网站文件移动到网站根目录(±0.5分钟)
  9. 更改configuration.php中的/tmp/和/log/路径,并从服务器中删除自定义迁移脚本(±0.5分钟)
  10. 将Exact.nl (Joomla 2.5)网站恢复在线

六分钟内成功迁移Joomla

如您所见,Exact荷兰网站仅关闭了六分钟。在此停机期间,整个网站及其所有数据已从Joomla 1.5迁移到Joomla 2.5。

访客没有注意到任何区别,停机前几分钟提交的表单已成功处理并迁移。当天早些时候在Joomla 1.5网站中进行更改的内容编辑者在登录后看到了更新的Joomla管理员界面,但发现所有更改都在迁移后的网站上。没有数据丢失。

需要庆祝在如此短的时间内成功迁移。为此,我们享受了唯一新鲜出炉的Joomla Stroopwafels!

joomla-stroopwafels

一些迁移经验教训

  1. 清理:确保网站完全清理干净,删除不再使用的文章、类别、模块和菜单,并在迁移之前清空回收站。
  2. 备份和测试备份:始终备份网站,并测试是否可以正确恢复备份。
  3. 测试,测试,测试,然后测试:我相信您不会喜欢迁移过程中的惊喜。了解预期结果,在迁移实际网站之前始终测试迁移。
  4. 紧急回滚:确保您可以在迁移过程中任何时候恢复网站的旧版本。
  5. 不要拖延:现在迁移您的非支持Joomla网站。Joomla 2.5和Joomla 3.2是Joomla项目当前支持的版本。它们安全、稳定,并拥有许多优秀的新功能和改进。

发表在Joomla社区杂志上的某些文章代表作者对特定主题的个人观点或经验,可能不与Joomla项目的官方立场一致。

0
Joomla! CMS, Joomla! 框架, 许可证
 

评论

已经注册? 登录这里
还没有评论。成为第一个发表评论的人

通过接受,您将访问由 https://magazine.joomla.net.cn/ 外部的第三方提供的服务