Nowadays, installing third-party packages through composer is a very common practice in any project. The code installed by composer is a public version of code from the Internet, which means that it cannot be arbitrarily modified.
In practice, it is inevitable that developers will encounter bugs in third-party packages, where no corrections have been released yet. By design, developers cannot directly modify the code downloaded from composer, because every time the composer is updated and installed the code will be overwritten by the public version again. In response to such correction requirements, Magento Cloud has designed patch mechanisms during and after the deployment process.
To apply a patch, developers need to create a patch file. Supposing that we want to add a line of comment as follows to the file vendor/magento/framework/Phrase.php:
First, create a copy of the file to be modified, in this case: vendor/magento/framework/Phrase-fix.phpvendor/magento/framework/Phrase.php to and copy it in the same root location as follows: vendor/magento/framework/Phrase-fix.phpvendor/magento/framework/Phrase-fix.php.
After modification, the following commands need to be executed in the project root directory as a root:
diff -rupN vendor/magento/framework/Phrase.php vendor/magento/framework/Phrase-fix.php > demo.patch
This command compares the original file Phrase.php with the new file Phrase-fix.php and generates a demo.patch file with the differences between them.
Then, open the demo.patch file for making adjustments:
First, add the git diff information and modify it to the original file change:
diff –git a/vendor/magento/framework/Phrase.php b/vendor/magento/framework/Phrase.php
index 3ee2rd7..8349152 111644
The index is a git hash, but it can be given arbitrarily since vendor files are usually listed in .gitignore.
Adjust the file path as follows:
— A/vendor/magento/framework/Phrase.php 2021-04-14 23:05:30.077087570 +0800
+++ b/vendor/magento/framework/Phrase.php 2021-04-14 23:05:22.469044185 +0800
At the end the adjusted patch file content would like as follows:
After this, the file patch can be placed into the m2-hotfixes folder in the cloud root project, if there is no such folder, it needs to be created.
The last step is to push the changes to the environment. After the deployment is completed, the patch should be applied successfully.
First, check the contents of the target file:
As expected, the changes have been added. In addition, Magento Cloud also provides tools to view the patch status by executing the following command:
php ./vendor/bin/ece-patches status
The patch file just uploaded will appear in the list, and it shows that it has been executed.
Besides this patch, there are many unexecuted patches on the list. These are some optional official patch files released by Magento. They are also easy to apply. For example, for applying MDVA-12304 and MDVA-30972 they need to be added in the .magento.env.yaml file as follows:
stage:
build:
QUALITY_PATCHES:
– MDVA-12304
– MDVA-30972
Then, commit the changes and push them to the environment for applying them. After redeploying the same command can be executed for confirmation:
php ./vendor/bin/ece-patches status
After confirmation, the environment can continue working as usual; however, it is recommended to apply patches only if the regular Magento customization options (preferences, plugins, etc) are not convenient for the specific code and/or the 3rd vendor module provider has not provided any code update via composer.