8分钟阅读时间 (1692字)

六分钟内完成复杂Joomla! 1.5迁移

Migração complexa de Joomla! 1.5 em seis minutos

Joomla! 1.5版本已经有一段时间不再被项目支持。您仍然可以使用这个版本,但安全更新将不再提供。此外,2和3版本有新的功能和改进,使得1.5看起来过时,并且可以明显看出Joomla!在过去一段时间内的进化。

将您的Joomla! 1.5网站迁移到当前项目支持的版本是一个好主意。仍然有很多网站在使用这个版本,原因很多,如时间不足、资金短缺、缺乏动力、不感兴趣等。

有时,这是因为迁移的复杂性。

最近,一位客户的一个Joomla! 1.5网站需要迁移。这是一个重大的挑战和学习的经历,我愿意与大家分享,以便在需要时能够更顺利地完成这个过程。

Exact Netherlands的Joomla网站

Exact是一家全球领先的商务软件供应商,为小型和中型企业提供完整的ERP解决方案。该公司开发云解决方案和特定于某些行业的解决方案,包括制造业、批发和分销、专业服务和会计。该公司已经使用Joomla!为其多个网站服务了几年的时间。Exact Netherlands的网站在Joomla! 1.5上运行,需要进行迁移。

这是荷兰最大的网站之一,也是公司的销售、沟通和营销的主要工具。对于Exact Netherlands来说,拥有一个稳定且始终可供访客访问的网站非常重要。

许多内容专业人士每天在该网站上工作,该网站始终处于动态状态。它使用多个自定义扩展,并包含大量菜单项、文章和模块。

迁移的主要要求

在迁移过程中考虑了一些非常重要的要求

  • 网站最大中断服务时间应为两小时,夜间。
  • 最终结果应保持相同的布局、功能、URL、菜单、文章等,在Joomla 2.5上运行;
  • 总之,访客不应察觉到网站不同版本之间的差异。

但是,如何实现这一点?一个“正常”的Joomla迁移——创建一个副本,迁移它,修复配置并将其上线——对于Exact来说不是一个选项。这将花费很多时间,而且网站副本会在几小时后过时。

正常的Joomla迁移

为了更好地了解迁移过程,项目以正常方式开始。为了迁移Joomla核心数据,选择了使用扩展程序SP Upgrade。这个商业(付费)扩展程序安装在一个没有示例数据的Joomla 2.5上。所有1,500篇文章、650个菜单项和950个模块都通过它迁移。

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

新功能和新的配置

到目前为止,我们已经完成了正常迁移的步骤。数据已经传输,但很明显,它还没有达到预期的效果。通常,这是由于与Joomla先前版本相比配置不同或新配置所导致的。一个简单的例子是菜单模块。在1.5版本中,它可以配置为显示0到3级,但是为了在2.5版本中达到相同的效果,配置必须在1到4之间进行。2.5中不再存在0级。

通常,会检查这些配置并根据需要进行调整。根据网站的大小,这可能需要几个小时或几天。一旦所有内容都经过检查并调整,网站就可以发布。这部分迁移对Exact项目来说是最关键的,因为进行调整需要很长时间,而且一切都有点不可预测。

一个定制的迁移脚本

仍然应该清楚哪些数据和配置调整是必要的,以确保两个版本完全相同。而不是通过Joomla界面进行更改,它们是在数据库中直接进行的,同时跟踪发生了什么。

所有这些更改都整合到一个定制的脚本中,该脚本由一系列SQL查询组成。合并所有必要的调整需要时间,但一旦脚本完成,SQL查询就会快速执行。

菜单级别差异

让我们创建一个简单的迁移脚本,并使用模块级别配置的调整作为示例。

创建一个名为migrate.php的文件,并将其放置在安装根目录下。在文件中插入以下代码。它修改了ID为233、294和357的模块。参数在循环中修改,然后保存到数据库中。ID为233的模块的初始级别从2更改为3。作为额外示例,将菜单类型添加到ID为294的模块中,并将面包屑导航模块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

大幅减少迁移时间

用于Exact的脚本比这个更完整,但已经对自定义迁移脚本的力量有了一定的了解:所有必要的后端操作都在几秒钟内完成,而不是几个小时或几天。这大大减少了迁移所需的时间,这对于Exact项目来说是一个重要的因素。

脚本的一个额外优点是可以多次测试和改进迁移,直到达到预期的结果。

良好的Joomla 2.5基础

除了对数据库的更改外,还需要修改服务器文件,如模板的覆盖文件。这是在测试期间进行的,结果是一个定制的安装,包括迁移结果正确运行所需的一切。

为了详细测试迁移脚本,使用了Joomla 2.5的新副本。这样,迁移就做好了更好的准备,并且在最终过程中消除了意外。

迁移的大日子

经过几周的准备,我们终于做好了最终迁移的准备。在最后时刻进行了多次测试,并在域名的子目录中创建了基本安装。一切准备就绪,开始执行以下步骤进行网站的最终迁移

  1. 备份1.5版本
  2. 将网站置于离线模式
  3. 使用SP Upgrade迁移数据(约一分钟)
  4. 将扩展表的副本复制到2.5版本的数据库中(约一分钟)
  5. 在2.5版本中
    1. 安装第三方扩展
    2. 应用第三方扩展的脚本
    3. 通过Joomla动态搜索索引内容
    4. 使用ACL Manager解决权限问题
  6. 应用自定义迁移脚本(约半分钟)
  7. 将Joomla 1.5的文件移动到存档目录(约半分钟)
  8. 将Joomla 2.5的文件移动到网站根目录(约半分钟)
  9. 修改configuration.php文件中的/tmp//log/路径,并从服务器上删除迁移脚本(约半分钟)
  10. 将Exact网站重新置于在线模式

六分钟内成功迁移

正如您所看到的,Exact Netherlands的网站仅离线了六分钟。在这段时间内,整个网站的数据从Joomla 1.5版本迁移到了2.5版本。

访客没有察觉到任何差异,迁移前的填写表单都被成功处理和迁移。内容编辑者在新登录后注意到一个新的界面,但他们在迁移后的网站上找到了所有更改。没有数据丢失。

在如此短的时间内成功迁移需要庆祝。为此,我们与刚出炉的美味的Joomla Stroopwafels一起庆祝!

joomla-stroopwafels

一些重要的迁移提醒

  1. 清理:确保网站完全清理干净。在迁移前删除不再使用的文章、类别和模块,并清空回收站。
  2. 备份和测试:始终备份网站并确保恢复功能正常。
  3. 测试,测试,再测试:我相信您不希望在迁移过程中遇到惊喜。了解预期结果,并在迁移前彻底测试迁移。
  4. 紧急恢复: 请确保您可以在迁移过程中随时恢复网站的前一个版本。
  5. 不要等待: 立即迁移。Joomla 项目目前支持 2.5 和 3.x 版本。它们安全、稳定,并拥有大量新功能和改进。

原文作者:,为 2014 年 3 月的 Joomla 社区杂志编写。

《Joomla 社区杂志》上发布的一些文章代表了作者对特定主题的个人观点或经验,可能不符合 Joomla 项目的官方立场。

0
系列:SEO 迁移技巧 - 第 1 部分 - Pl...
 

评论

已经注册? 登录这里
尚无评论。成为第一个提交评论的人

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