Tự tắt mô-đun


39

Trong Drupal 7, tôi có thể chỉnh sửa {system}bảng trong cơ sở dữ liệu theo cách thủ công để vô hiệu hóa mô-đun stubbon. Trong trang web Drupal 8 của tôi, bảng này đã biến mất.

Làm cách nào tôi có thể tắt thủ công một mô-đun trong Drupal 8?

Câu trả lời:


34

systemDữ liệu bảng Drupal 7 hiện được lưu trữ trong configbảng trong Drupal 8 so với core.extensiontham số.

Giải pháp 1: Cập nhật cấu hình

Bạn có thể chạy mã sau bằng cách sử dụng drush evalhoặc có thể đang sử dụng điều khoản của mô-đun Devel để Execute PHP Code.

// Read the configuration.
$module_data = \Drupal::config('core.extension')->get('module');

// Unset the modules you do not need.
unset($module_data['MODULE_NAME']);

// Write the configuration.
\Drupal::configFactory()->getEditable('core.extension')->set('module', $module_data)->save();

Bạn có thể làm tất cả điều này trong một lót nhanh chóng với drush.

drush eval "\$module_data = \Drupal::config('core.extension')->get('module'); unset(\$module_data['MODULE_NAME']); \Drupal::configFactory()->getEditable('core.extension')->set('module', \$module_data)->save();"

Giải pháp 2: Chỉnh sửa bảng cấu hình nếu bạn không thể thực thi PHP

Nếu trang web bị hỏng do mô-đun có vấn đề và thậm chí bạn không thể chạy mã PHP, thì có thể bạn có thể chỉnh sửa configbảng trực tiếp.

Trong hàng trong configbảng nơi name = "core.extension"và chỉnh sửa cột BLOB data. Đây datalà một mảng PHP được tuần tự hóa trong đó bạn phải loại bỏ mô-đun mà bạn muốn loại bỏ khỏi modulekhóa cấu hình.

Giải pháp 3: Giải pháp nhanh và bẩn

  • Loại bỏ mô-đun khỏi hệ thống tập tin
  • Cắt bàn cache_config

Tuy nhiên, giải pháp này có thể dẫn đến các thông báo nói rằng mô-đun không tồn tại trong hệ thống tệp có nghĩa là có gì đó không đúng. Nhưng ít nhất mô-đun bị hỏng bị vô hiệu hóa và bạn có thể truy cập trang web của mình trong hầu hết các trường hợp.

Xóa bộ nhớ cache

Đôi khi bạn có thể phải xóa bộ nhớ cache sau khi làm theo các bước trên. Đọc tài liệu tiện dụng này về cách xóa bộ nhớ cache .


1
Về mặt gỡ cài đặt các mô-đun tôi nghĩ rằng đây là giải pháp tốt nhất.
David

1
Nếu bạn cần gỡ cài đặt một mô-đun nhưng không thể vì các bảng cho mô-đun bị thiếu, bạn có thể sử dụng tùy chọn thứ ba với drush eval. Một ví dụ một lớp lót là: drush eval "\$module_data = \Drupal::config('core.extension')->get('module'); unset(\$module_data['example_module']); \Drupal::configFactory()->getEditable('core.extension')->set('module', \$module_data)->save();Lưu ý ký hiệu đô la đã thoát để dòng lệnh không hiểu sai $modulelà biến Bash.
sillygwailo

Chúc mừng cho kẻ lười biếng một lót! Thiếu một trích dẫn ở cuối
Matt Fletcher

Điều khá quan trọng là bạn phải xóa bộ nhớ cache và sau đó xuất cấu hình để cấu hình không cố cài đặt lại cho đến khi bạn sẵn sàng.
Adaddinsane

16

Làm cái này:

rm -rf modules/your_stubborn_module
rm -rf sites/default/files/php

Tùy thuộc vào mô-đun, bạn có thể phải xóa một số mục khỏi bảng cấu hình (xem câu trả lời của valli) và một số bảng khác.
Turion

Điều này đã không làm việc cho tôi.
rooby

Bạn phải chạy drush cache-rebuildquá
Sky

16
  • Chỉnh sửa thủ công configbảng trong đó name = 'core.extension'và xóa mô-đun khỏi blob dữ liệu là một mảng được tuần tự hóa.
  • Hãy lưu ý để giảm chiều dài mảng mô-đun (...s:6:"module";a:HERE;{...)
  • Cắt bớt cache_configbảng từ phpmyadmin hoặc sử dụng dòng lệnh.

1
Cảm ơn, điều này đã giúp tôi. Câu trả lời nên đọc " Chỉnh sửa thủ công bảng {config}". Phần văn bản cần xóa khỏi nội dung BLOB là:i:0;s:8:"name of the module";
Hendrik

2
Câu trả lời này đã giúp giải quyết tình huống trong đó một mô-đun không thể được gỡ cài đặt hoặc cài đặt lại vì một thực thể tùy chỉnh mà nó xác định bị thiếu.
daniels

1
@hendrick điều này có thể đã làm việc cho bạn nhưng chuỗi để loại bỏ từng mô-đun nên được cấu trúc như s:8:"name of the module";i:0;. Điều @valli có nghĩa là mảng mô tả số lượng mô-đun nên được giảm theo số lượng theo số lượng mô-đun bị loại bỏ. Sự khởi đầu của blob trong thiết lập của tôi a:4:{s:6:"module";a:59:{là một mảng gồm 59 mô-đun. Nếu bạn xóa hai thay đổi giá trị mảng đó thành 57.
dimmech

3

Cân nhắc sử dụng Drush. Drupal 8 vẫn đang xác định "vô hiệu hóa các mô-đun" là gì. Có một cuộc thảo luận đang diễn ra nếu cần phải có tùy chọn đó hoặc nó nên được gỡ bỏ.


Tôi đang phát triển cục bộ trên PC Windows và lần trước tôi trông Drush chưa sẵn sàng cho Drupal 8. Tôi sẽ phải xem lại.
va chạm

@bumpaw Drush cũng hoạt động trên Windows. Điều đó ít nhất sẽ giúp bạn tại địa phương. Khi nói đến máy chủ sản xuất, tôi biết nhiều máy chủ lưu trữ được chia sẻ không cung cấp cho bạn Drush hoặc thậm chí SSH, điều này thường khiến cách quản lý trở nên cồng kềnh hơn. drush.org/drush_windows_installer
hampusn

Và, bằng cách sử dụng drush, làm thế nào để "loại bỏ thủ công" một mô-đun theo cách khác với quy trình UI? Bạn dường như không trả lời câu hỏi.
1kenthomas

3

Trong Drupal 8, hãy thử xóa mô-đun khỏi thư mục mô-đun của bạn và chạy xây dựng lại.

Cố gắng drush pm-uninstall module-namelà tốt.


2

Tôi đã thử tất cả các câu trả lời khác nhưng vẫn nhận được một thông báo lỗi drupal. Để giải quyết nó, tôi phải xóa một hàng khỏi bảng key_value (tìm tên mô-đun trong cột tên)


2

Nếu bạn cần cập nhật mọi thứ liên quan đến cấu hình Drupal, trong trường hợp này core.extension, hãy sử dụng Drush:

[Drush 8.x trong ví dụ này]

drush cedit core.extension

1

Có một mô-đun cho điều đó. Mô-đun này đã được đăng vào tháng 8 năm 2013 trên drupal.org . Trong trường hợp ai đó cần.

Vô hiệu hóa các mô-đun

Như đã nêu trên trang của mô-đun này,

Drupal 8 đã loại bỏ khả năng vô hiệu hóa các mô-đun vì nhiều lý do. Xem # 1199946: Các mô-đun bị vô hiệu hóa bị hỏng sau khi sửa chữa, do đó, chức năng "vô hiệu hóa" cần phải được loại bỏ và nhiều vấn đề khác trong hàng đợi của các mô-đun lõi và đóng góp khác nhau.

Mô-đun này mang lại khả năng (tạm thời) vô hiệu hóa các mô-đun khỏi UI hoặc với Drush. Lưu ý rằng không có gì đảm bảo cho nội dung, cấu hình hoặc thậm chí trang web của bạn sau khi bạn tắt mô-đun.


0

Đây là cách, tôi đã xóa thủ công một mô-đun có tên "better_messages" khỏi ví dụ Drupal 8 của mình. Ngay sau khi tôi cài đặt mô-đun "better_messages", trang web đã bị sập. Vì vậy, không có cách nào để gỡ cài đặt mô-đun từ giao diện người dùng. Tôi chưa cài đặt Drush. Tôi đã thực hiện nhiều cài đặt được đưa ra trong các diễn đàn, nhưng đây là cách cuối cùng nó hoạt động với tôi.

1 Đổi tên mô-đun thành old_better_messages trong thư mục mô-đun.

  1. Thông qua url, đã chạy http: // IP: port / Foldername / construcild.php . Điều này đảm bảo rằng trang web đã hoạt động trở lại, nhưng chỉ ở chế độ chỉ đọc. Tôi không thể thực hiện các hoạt động quản trị hoặc chỉnh sửa bài viết.

  2. Được sử dụng lệnh sau để xóa mục từ cơ sở dữ liệu

XÓA TỪ key_value WHERE bộ sưu tập = 'system.schema' AND name = 'better_messages';

Trong trường hợp của tôi, không có mục trong cơ sở dữ liệu. Tôi nghĩ rằng nó có thể đã bị xóa vì các pha nguy hiểm khác nhau mà tôi đã làm trước đó.

  1. Sau đó, sử dụng DB visualizer, tôi đã xóa các mục từ tất cả các bảng bắt đầu bằng bộ đệm.

Điều này đã giải quyết vấn đề. Điều này dựa trên sự giải thích của tôi về https://www.drupal.org/node/2487215


0

Câu trả lời của Jigarius ở trên, loại công việc ...

Tôi đã phải: // Đọc cấu hình.

$module_data = \Drupal::config('core.extension')->get()['module'];

nên làm điều tương tự. Không chắc tại sao nó không hoạt động như Jigarius đã viết nó ...

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.