Magento Cloud – 如何在專案中使用Patch進行修正
現今在專案中,透過composer安裝第三方套件來使用是極為普遍的方式,使用composer安裝的程式碼是來自網路的公版軟件,也就意味著不可任意修改。而實務上,難免會遇到第三方套件存在bug,且尚未釋出修正。我們無法直接去修改vendor中的程式,因為每次composer更新安裝時,程式就會再次被公版覆蓋掉。針對這樣的修正需求,Magento Cloud在部署過程設計了一個Patch機制,可以在composer install完畢,去執行修改vendor裡特定的程式檔案。
要執行Patch,首先需要製作Patch檔。假設我們要為檔案 vendor/magento/framework/Phrase.php 增加一行如下的註解:
先複製出檔案vendor/magento/framework/Phrase-fix.php來進行修改
修改完畢後,以root身份在專案根目錄下,執行如下指令
diff -rupN vendor/magento/framework/Phrase.php vendor/magento/framework/Phrase-fix.php > demo.patch
此指令是將原檔Phrase.php與新檔Phrase-fix.php做比較,產生差異紀錄的demo.patch檔。
接著開啟demo.patch進行調整:
首先,增加git diff的資訊,修正為原檔的異動:
diff –git a/vendor/magento/framework/Phrase.php b/vendor/magento/framework/Phrase.php
index 3ee2rd7..8349152 111644
index意義上是git的hash,不過由於此處是模擬資訊,任意給定即可。
將檔案路徑做如下調整:
— 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
調整過後的patch檔內容:
接下來就可以放進magento cloud專案,把這個demo.patch放到cloud專案git裡的 m2-hotfixes 資料夾,若無此資料夾,自行建立即可。
最後一步推上cloud遠端,完成部署後,進到cloud server看看吧!
先檢查一下目標檔案的內容:
如預期已加上客製的註解,另外Magento Cloud也有工具用來查看patch狀態,可以執行以下指令:
php ./vendor/bin/ece-patches status
出現剛剛上傳的patch檔,並且顯示已執行。
大家可能已注意到列表上除了我們自製的patch,還有很多未被執行的patch。這些都是Magento 釋出的一些選擇性官方修補檔。使用方式很容易,例如想要修補MDVA-12304跟MDVA-30972,只需在檔案.magento.env.yaml加上如下設定即可:
stage:
build:
QUALITY_PATCHES:
– MDVA-12304
– MDVA-30972
各位可以自行試試,在此就不贅述囉。
對於vendor裡檔案的修正,Magento Cloud設計了Patch機制來應對,但如果今天少了這段機制,也還有其他選擇,例如fork到個人git上,改成安裝自行修正過後的版本,不過這個做法要特別注意該軟件的license聲明是否有所限制。希望今天的分享,有幫助到大家進一步完善自己的Magento專案,我們下次見囉!
如果有您有更多疑問可以詢問我們,未來會撰寫更多電商網站相關文章,您想知道什麼嗎?歡迎在下方留言給我們。或追蹤我們的粉絲專頁及IG,就不錯過最新文章喔!
想學習更多Magento設定嗎?請見:Magento教學導覽
我要留言