创建补丁并将其应用于Magento 2

创建补丁并将其应用于Magento 2

2019年4月23日发布 in 优雅的骆马
一步结帐
2019年4月22日
更多的站点,相同的员工,更少的维护
五月23,2019

本文介绍如何创建补丁并将其应用到Magento2。本文假定您’重新使用Composer安装Magento( “如何获取Magento软件” table here),这是我推荐给在生产现场上运行Magento的任何商人的方法。

如果您使用Composer安装Magento,它将’无法直接编辑核心文件,而这种方式将导致这些编辑持久化,因为它们从未提交给版本控制,而是通过Composer进行了导入。但是,借助Composer插件 作曲家补丁,’可能以某种方式应用补丁程序,从而使这些更改在版本控制中得以跟踪。

修补Magento核心的最常见用例是您’我遇到了一个核心错误,’s the use case we’我将在本文中假设。在极少数情况下,可能需要打补丁来做其他事情,例如调整核心功能或做一些’使用首选项,插件,事件或其他标准的Magento开发方法无法实现。但是,仅当所有其他选项都用尽时,才应该轻轻松松地进行此操作。

首先,让’讨论您可以创建/获取补丁的一些方法:

创建补丁

Github

Magento 2的一大优点是它’一个具有活跃社区的开源平台。如果你有机会’核心应用程序也遇到了问题,其他人也遇到了问题。如果您在网站上搜索问题或提出请求, Magento 2 Github 帐户,您通常可以找到一个拉动请求或一个看起来可以解决您问题的特定提交。例如,如果您’重新使用Magento 2.1.9或更早版本,您可能会遇到问题’无法在管理员中保存数量为负的产品。如果您在Magento Github上搜索此问题,可能会遇到 这个问题。如果您着眼于该问题的根源,’ll see a link to 这个提交. 您 can turn 承诺 and pull request pages 在to a 补丁 by appending “.patch”URL。 (例如: //github.com/magento/magento2/commit/11bcdcc83d6d5d3adc4151cfefd62b6f4cdcd680.patch) 在里面 应用补丁程序部分 在下面,我们’将介绍如何将这样的补丁应用到Magento。

Magento支持

When Magento Commerce merchants run 在to core issues, they can submit issues to Magento支持, who will commonly reply with 补丁 to solve those issues. When dealing with Magento支持, you should request 补丁 that can be applied to Magento 在stalled via Composer. In other words, 补丁 with paths mapped to the 供应商/*** directories, rather than app/code/Magento.

定制补丁

在某些情况下,需要通过编辑核心代码来修复核心错误。虽然可以通过编写插件/首选项等更适当地修复一些核心错误,以规避此问题,但有时编写补丁程序是更好的做法。编写核心补丁的好处是,如果基础代码在将来的版本中发生更改,则该补丁将无法应用,从而提醒您应删除/更改该补丁。根据所修复内容的性质,创建补丁也可能会花费较少的时间。

There are several ways 补丁 can be created for 文件s that are not tracked by Git, but here is 上e way to do it (the example is assuming you want to 补丁 the 供应商/magento/module-catalog/Setup/UpgradeSchema.php file):

When naming 补丁, use a name that allows the 补丁 to be easily linked back to the source issue, such as 吉特hub-issue-6474.patch or MAGETWO-56699.patch. If there is no source issue to link to, you can use a short dash-delimited description of the issue.

准备补丁

要应用补丁,请使用 作曲家补丁,有两个先决条件:

  1. 修补程序文件中的路径必须相对于您所编写的Composer软件包’re planning to 补丁. For example, if you need to 补丁 the \Magento\CatalogInventory\Model\Stock class, the path 在 your 补丁 needs to be Model/Stock.php, not 供应商/magento/module-catalog-inventory/Model/Stock.php.
  2. 您’我们将需要确保补丁文件仅更改单个Composer软件包中的文件。如果补丁程序适用于多个Composer软件包,则您’需要将补丁文件拆分为多个补丁文件。

例如,让’s say you’重新遇到链接到的问题 GitHub部分 以上。这就是你’d准备补丁文件:

  1. 下载 //github.com/magento/magento2/commit/11bcdcc83d6d5d3adc4151cfefd62b6f4cdcd680.patch 文件
  2. 您’ll see that the 补丁 applies to both app/code/Magento/CatalogInventory and app/code/Magento/Ui. Those directories won’t exist 在 your 在stallation, but the corresponding paths will: 供应商/magento/module-catalog-inventory and 供应商/magento/ui. Since those are two separate 作曲家 packages, you’将需要将该文件的内容分成两个单独的文件。
  3. 您’ll then need to find all 在stances of app/code/Magento/CatalogInventory and app/code/Magento/Ui and delete them since the 补丁 文件 must be relative to the 作曲家 package.
  4. 这是两个结果文件的外观:
    吉特hub-9139_module-catalog-inventory.patch
    吉特hub-9139_module-ui.patch

应用补丁

请按照以下步骤将补丁应用到Magento网站:

  1. Create a 补丁/ directory 在 the root of your Magento 在stallation.
  2. Move the 补丁(es) you want to apply to the 补丁/ directory.
  3. 在本地项目的根目录中运行以下命令:
  4. Open the 作曲家.json file at the root of your Magento 在stallation and edit the existing extra object to look like this, specifying the Composer package to apply the 补丁(es) to as well as a description of the 补丁(es) and a reference to the 文件 location:

    The 作曲家-exit-on-patch-failure option is important to enable so that if a 补丁 fails to apply, Composer will return a non-zero exit code. If you’re using 像Capistrano这样的自动化部署工具,这很有用,因为它将阻止部署成功。可能发生这种情况的常见情况是,如果应用补丁程序修复了某些问题,然后在新版本的Magento中修复了该问题。部署新版本的Magento时,补丁将无法应用,因为更改将包含在新版本中。在那种情况下,需要删除失败的补丁程序。
  5. Run 作曲家安装 to apply the 补丁(es).
  6. Run 作曲家 update <PACKAGE NAME> (e.g. 作曲家 update 马真托/module-catalog-inventory) to update the 作曲家 lock 文件. The lock 文件 tracks which 补丁 have been applied to each 作曲家 package 在 an extra > 补丁_applied object.
  7. Add the 作曲家.json作曲家.lock, and the newly 加ed 补丁/*** patch 文件 to your version control system, 承诺, and then push the changes.

现在,每当您将Magento应用程序部署到开发,舞台或生产环境时,这些补丁应在任何时候应用“composer 在stall” is run.

结论

既然您知道如何将补丁应用到Magento 2,就可以解决这些核心错误。如果您对本文有任何疑问,请随时与我联系 在推特上.

发表评论

您r email 加ress will not be published. 必需的地方已做标记 *

该网站使用Akismet减少垃圾邮件。 了解如何处理您的评论数据.

最近的帖子查看全部
2020年10月22日

Covid世界中的假日销售:应对挑战

毫无疑问,2020年是历史性的一年。火灾,全球大流行,暴动,老虎王等’只是冰山一角。如 […]
2020年8月7日

涡轮增压ZZPerformance的付费搜索

2020年7月30日

Intermix Beats M1 End of Life with 优雅的骆马Accelerator