您如何估算Magento升级?


63

概述:

该问题最初是被询问的,后来在StackOverflow上关闭。我们在meta中指出,这里是该问题的正确地方。

这个问题有利于帮助许多人找到估计Magento升级的正确方法。

问题:

我很想知道您如何衡量Magento升级所需的时间?我想,你们中的大多数人都很难回答客户的问题:“升级我的Magento商店需要多长时间?”

通常,客户只需要听到一个数字,例如:“这将花费X个小时,花费Y币”。

问题背后的主要思想是关于技术方面,以及您作为开发人员应如何检查以自行计算Magento升级。

我创建了下一个检查清单,仅用于我自己的计算:

  • Magento核心被感动了吗?
  • Magento DB模式是否受到影响?
  • 数据库中是否存在不一致的数据?
  • 在本地和社区代码池中安装了多少个自定义扩展?
  • 自定义扩展与Magento的最新版本兼容吗?
  • 主题开发人员是否使用local.xml文件作为布局指令,还是只是将xml文件从base / default / layout复制到自定义主题的布局目录?
  • 布局xml文件中是否已弃用了布局指令/块方法?
  • 我有开过这家Magento商店吗?

您是否认为我遗漏了一些东西,如果可以,您是否想与我和社区分享您对清单的其他要点?


对于相对简单的〜年收入的0.875至1.75%,对于中等的年收入的1.75%至3.5%,困难的年收入的2.625%至5.25%。

Answers:


100

估计Magento升级是一个过程,该过程收集有关您将要进行的最新安装上的修改的信息,检查这些修改是否会引起问题,然后评估解决这些问题所需的时间。

从字面上看,所有修改都可以分为内核外内核内

核心外修改是指那些升级不会覆盖的修改。这些是第三方扩展放置在本地范围内的核心文件(app / code / local / Mage)和自定义主题

内核内修改直接应用于Magento 核心文件(应用程序/代码/核心),本地化文件(应用程序/语言环境/ en_US),核心模板以及诸如javascripts之类的东西,但仍需考虑很少自定义的外部库

核外修改

第三方扩展

升级期间,第三方扩展是问题的主要根源。这意味着更多的扩展,您将有更多的时间来分析它们。

首先要检查的是,您要升级到的Magento版本是否尚未实现扩展提供的功能。例如一些扩展喜欢Yoast_CanonicalUrlMxperts_CustomerAddress或者Fontis_Wysiwyg被广泛使用在Magento 1.3.xx及以上,但现在的核心Magento的功能的一部分,不再需要。

然后,最好检查(询问您的客户)您是否真的需要拥有的所有这些扩展。您可能安装了一些扩展程序,但从未真正使用过。因此,此时最好进行某种清理。

然后要检查的重要一件事是,每个其余扩展与要升级到的Magento版本的兼容性。如果某些扩展名不兼容并且没有相似的扩展名可用,您将很难选择丢失某些功能或修改现有扩展名以使其兼容。

注意:请勿直接修改第三方扩展名,而是创建一个新扩展名,该扩展名将扩展已过期的扩展名,然后在新扩展名的引导XML中设置依赖项。

完成所有这些操作后,便可以提供每个剩余扩展的实际分析。它应始终从检查etc/config.xml文件开始。有3件事情要寻找:

  • 类重写本身并不是一种干净的技术,但是在某些情况下,别无选择。因此,如果在新版本的Magento中更改了重写的类,则可能是一个潜在问题。
  • 布局更新不太可能导致升级问题,但是如果扩展引用的块是在较新的Magento版本中弃用的块,则必须解决此问题。
  • 在升级过程中,SQL更新被严重低估了。当第三方分机正在创建引用默认Magento表中某个字段的外键时,就会发生此问题。结果,该字段无法修改。然后,如果本机安装脚本将尝试更新此字段,它将无提示地失败。之后,每个下一个引用此字段的安装脚本都将使您的升级崩溃。

应用/代码/本地/法师

在完成扩展名之后,是时候查看app/code/local/Mage目录了。在这里,您会发现已修改的核心文件已移至合并local范围。他们每个人肯定会花掉您一些白发,因为您永远不知道(如果不是您将它们放在那儿)在那里修改了什么以及出于什么原因。因此,您必须将它们中的每一个与来源进行比较,然后将添加的功能迁移到新版本的对应文件中。

自订主题

最后一堆非核心修改是自定义主题。这似乎没什么大不了,但实际上这是一个灰色区域。Magento基本主题在各个版本之间进行了修改,每个自定义主题都必须模仿其中的一些修改。不幸的是,没有确定要寻找什么和必须迁移什么的灵丹妙药。因此,只需为升级后的一些重大惊喜和轻微挑剔做好准备。

核心修改

在理想世界中,没有任何东西。但是,当Magento安装被第三方开发人员滥用后,他们以便宜的价格提供了很多东西,那么您可以期望得到安装。因此,核心修改是在升级过程中将被覆盖的修改。在大多数情况下,它不会产生任何错误,但是结果,您将失去以如此残酷的方式添加的功能。

检测内核内修改的唯一方法是将Magento安装的所有文件与相同版本的干净文件进行比较。我建议用git来做。为什么?仅仅是因为它将很好地处理所有换行符和空格。

即使您的Magento安装不在git下,您仍然可以将文件复制到单独的目录中,然后运行git init。然后进行首次提交,复制“干净的” Magento文件并运行git status。您将获得如下内容:

现在,根据修改后的文件数,您可以一次git diff在每个文件上或整个批次上运行。这将为您提供所有核心修改的全面参考。如果您有任何gitStor可视化版本(例如phpStorm),那么生活就容易得多:

我建议您这样做,git diff > changes.txt这样您总是可以手动获得一份修改清单。

有了核心修改的列表,您可以估计必须将哪些内容转移到新版本中以及需要多少时间。

现在,我想为实际升级提供一些建议。这个过程有充分的文档记录,因此我不会编写要运行的命令和单击位置。但是,我想强调几个重要事项:

  • 我们假设您正在开发环境中进行升级。在生产服务器上运行升级很容易自杀。
  • 升级时,不要让他们在生产中进行任何更改。将您的Magento置于版本控制下,甚至禁止写入临时锁定文件。
  • 禁用所有第3方扩展,但请注意最初禁用了哪些扩展,因此以后将不再启用它们。
  • 检查服务器上是否正在运行Magento清理脚本。否则,截断所有表开始dataflow_*log_*report_*
  • 在升级时恢复为默认主题。

升级脚本完成后:

  • changes.txt在迁移所有真正有价值的核心修改之前,请先参考您所做的修改。
  • 迁移app/code/local/Mage升级前发现的修改。
  • 一对一启用第三方扩展。
  • 放回主题,然后将结果与生产服务器进行全面比较。
  • 对结果满意后,将其部署到生产中。

结论

我知道这听起来很可怕,但是如果您定期进行升级,保持核心整洁并仅从您真正信任的供应商处安装扩展,并且仅在确实需要它们时,您才不会面对本文所述的大多数困难。保持您的Magento生态系统健康,您将得到回报。

圣经后

在非常复杂的情况下,重新安装最新的Magento从头开始并逐步迁移商店主题和功能是有意义的。这肯定会花费一些时间,但是最终您将拥有一个健康的Magento系统,并且完全了解正在发生的事情。


检测内核修改的另一种方法是使用n98-magerun的插件Magento Project Mess Detector
Julien Loizelet

15

一般来说,开发时切勿触及Core代码。Magento中有许多机制可让您解决任何问题,甚至是内部错误。话虽如此,还有其他问题需要注意。

  1. 是否有任何社区或本地模块覆盖核心代码(可以在modules文件夹中搜索<rewrite>,这是一种不好的做法,因为它们实际上应该使用非干扰性的代码,例如event)
  2. Magento尝试使代码向后兼容,但是有时代码确实会发生重大更改(可以在此处找到),如果向后不兼容的更改很多,则可能会增加流程。
  3. 将代码复制到开发环境中是否容易/可行。如果是这样,可能只需要运行升级和测试即可。
  4. 需要升级吗?新版本中是否有客户端无法缺少的功能?任何安全问题(Magento多次提供了后修补程序)

就模板而言,根据以前的经验,我可以告诉您它几乎不会中断,除非开发人员对模板编码感到疯狂(无论如何应该以块为单位)。


10

这里有一些事情要记住:

  • 检查主题是否兼容(检查模板文件中是否存在大量编码-有时是初级开发人员执行此操作)
  • 检查媒体的存储方式(是否使用CDN等)
  • 检查是否有任何特殊的缓存方法(APC Memcached等)

处理此类客户请求的一种方法是进行评估审核。

这需要告诉客户您将花费一些(可结算的)时间来查看它,并为他们提供进行项目的更准确的时间框架/成本。

走这条路对您和客户都有利。

客户通常会对您的估计更有信心,并且会尊重您的建议,从而通过减少可能的压力而使您受益。

估算审查:

实际的估算审查将遵循以下原则:

  • 转储实时数据库并将其导入到开发计算机上
  • 将magento文件从其实时计算机复制到您的开发计算机
  • 确保一切正常并正常工作
  • 尝试升级并进行一些初步测试以查看可能会导致什么问题

该过程平均需要花费两个小时,并且可以使您对手头的系统有很多必要的了解。


1
“转储实时数据库并将其导入到开发计算机上” –完全符合PCI规范。请确保不要导出实时凭据...
路加福音A. Leber

10

我们在Magento CE上进行了各种升级,最糟糕的是从1.3升级到1.7,这花了我们将近4天的时间。最初的估计是1-2天。我猜想从1.x升级到2.x将会是一项艰巨的任务,即使核心团队将提供迁移工具,从头开始也可能更干净。


6

我想在上面给出的出色答案中添加一件事:

  • 检查VCS和正确的部署过程是否到位。

如果没有适当的流程,并且在出现问题时退后一步,就不会进行升级(即使以前没有在站点上工作,我也不会这样做)。大约90%的接近我们进行Magento升级的客户(以前从未成为我们的客户)只有在没有任何测试/分阶段的现场环境中才能使用VCS。


6

与其他实体的集成是一个重要的问题。这是您可能无法通过查看站点发现的-例如,后端系统通过Magento API来获取订单的情况很常见,并且如果升级时您无法处理集成的连续性,会陷入混乱。

当您查看组件时,请注意那些与其他系统对话的组件-每个组件都很难进行测试,因为您不想意外地将测试数据推送到实时系统中。通常,原始开发人员已经使用了一个测试端点,但是升级时您可能不再拥有该信息。


谢谢,这是我到目前为止从未发现的事情,但很高兴知道!
ceckoslab
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.