來源:https://drupal.stackexchange.com/questions/315921/removing-phantom-plugin-from-database/320215#320215
當您卸載模組時,可能會出現該程序未完全執行或不存在任何刪除程序的情況,因此資料庫仍處於「髒」狀態。
通常強行刪除插件導致的錯誤是這樣的:
[error] Drupal\Component\Plugin\Exception\PluginNotFoundException: The "name-of-plugin" entity type does not exist. in Drupal\Core\Entity\EntityTypeManager->getDefinition()
啟用顯示所有錯誤訊息的設定可以幫助您了解錯誤出現的位置以及需要採取措施的位置。
您可以在此處的 admin/config/development/logging 頁面上啟動完整的日誌啟用。此配置可以幫助您確定問題是配置問題還是插件名稱被硬編碼到程式碼中。
現在我們將解決如何解決與設定相關的問題,為此我們有兩種可能的方法:
如果您遵循 Drupal 社群推薦的標準發布方法,此解決方案很可能是最常用的解決方案。
透過圖形介面或使用 drush config:export 指令匯出整個設定。在從匯出還原的檔案中,使用外掛名稱執行全文搜尋。刪除導致錯誤的配置部分並使用 drush config:import
這個解決方案對於那些像我一樣無法匯出整個配置並重新匯入但需要在網站上「熱」工作的人來說非常有用。
要查找哪些配置導致錯誤,您可以在資料庫上執行此查詢:
SELECT name FROM config WHERE data LIKE "%name-of-plugin%";
查詢在設定表中搜尋有問題的插件,並傳回呼叫該插件的配置的名稱。
取得設定名稱後,您可以繼續刪除外掛程式。
根據插件和錯誤的配置,刪除方法可能會略有不同,現在讓我們考慮一個範例,它也可以作為其他情況的良好起點。
例如
由於 Drupal 10 更新錯誤,我的 filter_image_lazy_load 外掛程式出現了問題。
上一個查詢傳回了這些配置:
filter.format.basic_html filter.format.full_html filter.format.restricted_html
透過 config.factory 服務,我載入了設定並檢查了問題所在。然後您可以像這樣繼續刪除插件:
$configName = 'filter.format.basic_html'; $config = \Drupal::service('config.factory')->getEditable($configName); $filters = $config->get('filters'); unset($filters['filter_image_lazy_load']); $config->set('filters', $filters)->save()
你可以使用 drush config:get filter.format.basic_html 和 drush config:set filter.format.basic_html 或一次使用 drush config:edit filter.format.basic_html 來完成相同的事情
清理配置後,執行 drush 快取:重建,錯誤應該解決!
以上是Drupal:從資料庫中刪除 Ghost 插件的詳細內容。更多資訊請關注PHP中文網其他相關文章!