수동으로 모듈 비활성화


39

Drupal 7에서는 {system}데이터베이스 에서 테이블을 수동으로 편집하여 스텁 본 모듈을 비활성화 할 수있었습니다. Drupal 8 사이트에서이 테이블은 사라졌습니다.

Drupal 8에서 모듈을 수동으로 비활성화하려면 어떻게해야합니까?

답변:


34

Drupal 7 system테이블 데이터가 이제 매개 변수 config에 대해 Drupal 8 의 테이블에 저장됩니다 core.extension.

해결 방법 1 : 구성 업데이트

drush evalDevel 모듈의를 사용 하거나 사용중인 다음 코드를 실행할 수 있습니다 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();

을 사용하여 빠른 한 줄짜리 로이 모든 것을 할 수 있습니다 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();"

해결 방법 2 : PHP를 실행할 수없는 경우 구성 테이블 편집

문제가있는 모듈로 인해 사이트가 손상되어 PHP 코드를 실행할 수없는 경우 config테이블을 직접 편집 할 수 있습니다.

BLOB 열이 있는 config테이블 의 행에서 name = "core.extension"편집하십시오 data. 이것은 구성 키 data에서 제거하려는 모듈을 제거해야하는 직렬화 된 PHP 배열 module입니다.

해결책 3 : 빠르고 더러운 해결책

  • 파일 시스템에서 모듈 제거
  • 테이블 자르기 cache_config

그러나이 솔루션은 파일 시스템에 모듈이 존재하지 않는다는 메시지가 표시 될 수 있습니다. 그러나 적어도 고장난 모듈은 비활성화되며 대부분의 경우 사이트에 액세스 할 수 있습니다.

캐시 지우기

때로는 위 단계를 수행 한 후 캐시를 지워야 할 수도 있습니다. 캐시를 지우는 방법에 대한 이 편리한 설명서를 읽으십시오 .


1
모듈 제거 측면에서 이것이 최선의 해결책이라고 생각합니다.
David

1
모듈을 제거해야하지만 모듈 테이블이 없어서 모듈을 제거 할 수없는 경우 세 번째 옵션을로 사용할 수 있습니다 drush eval. 한 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();줄짜리 예제는 다음과 같습니다 . 이스케이프 처리 된 달러 기호를 참고하여 명령 행이 $moduleBash 변수로 잘못 해석되지 않도록 하십시오.
sillygwailo

게으른 원 라이너를 응원합니다! 그래도 끝에 견적이 없습니다
Matt Fletcher

캐시를 지우고 구성을 내 보내야 준비가 완료 될 때까지 구성을 다시 설치하지 않습니다.
Adaddinsane

16

이 작업을 수행:

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

모듈에 따라 구성 테이블 (valli의 답변 참조) 및 일부 다른 테이블에서 일부 항목을 삭제해야 할 수도 있습니다.
Turion

이것은 나를 위해 작동하지 않았습니다.
rooby

당신은 실행해야 drush cache-rebuild너무
스카이

16
  • 직렬화 된 배열 인 데이터 블로 브에서 모듈을 제거 할 config테이블을 수동으로 편집하십시오 name = 'core.extension'.
  • 모듈 배열 길이도 줄이십시오 (...s:6:"module";a:HERE;{...)
  • cache_configphpmyadmin 또는 명령 줄을 사용하여 테이블을 자릅니다 .

1
고마워, 이것은 나를 도왔다. 답은 "수동 으로 {config} 테이블 편집 "으로 표시되어야합니다 . BLOB 내용에서 제거 할 텍스트 부분은 다음과 같습니다.i:0;s:8:"name of the module";
Hendrik

2
이 답변은 정의한 사용자 지정 엔터티가 없기 때문에 모듈을 제거하거나 다시 설치할 수없는 상황을 해결하는 데 도움이되었습니다.
다니엘스

1
@hendrick 이것은 당신을 위해 일했을 수도 있지만 각 모듈을 제거하는 문자열은로 구성되어야합니다 s:8:"name of the module";i:0;. @valli의 의미는 모듈 수를 설명하는 배열은 제거 된 모듈 수에 따라 숫자를 줄여야한다는 것입니다. 내 설정에서 blob의 시작은 a:4:{s:6:"module";a:59:{59 모듈의 배열입니다. 두 배열을 삭제하면 해당 배열 값을 57로 변경합니다.
dimmech

3

Drush 사용을 고려하십시오. Drupal 8은 여전히 ​​"비활성화 모듈"이 무엇인지 정의하고 있습니다. 가 진행중인 논의 가 해당 옵션해야하거나 제거해야합니다.


Windows PC에서 로컬로 개발 중이며 마지막에 Drush가 Drupal 8을 사용할 준비가되지 않은 것처럼 보였습니다. 다시 살펴 봐야합니다.
bumpaw

@bumpaw Drush는 Windows에서도 작동합니다. 적어도 현지에서 도움이 될 것입니다. 프로덕션 서버와 관련하여 많은 공유 호스팅에서 Drush 또는 SSH를 제공하지 않으므로 일반적으로 관리 방법이 번거로워집니다. drush.org/drush_windows_installer
hampusn

그리고 drush를 사용하면 UI 프로세스와 다른 방식으로 모듈을 어떻게 수동으로 제거합니까? 질문에 답변하지 않은 것 같습니다.
1kenthomas

3

Drupal 8에서 모듈 폴더에서 모듈을 제거하고 rebuild.php를 실행하십시오.

시도해보십시오 drush pm-uninstall module-name.


2

다른 답변을 모두 시도했지만 drupal 오류 메시지가 계속 나타납니다. 이를 해결하기 위해 key_value 테이블에서 행을 제거해야했습니다 (이름 열에서 모듈 이름을 찾으십시오)


2

Drupal 구성과 관련된 것을 업데이트해야하는 경우이 경우 core.extensionDrush를 사용하십시오.

[이 예에서 Drush 8.x]

drush cedit core.extension

1

이를위한 모듈이 있습니다. 이 모듈은 2013 년 8 월 drupal.org에 게시되었습니다 . 누군가가 필요한 경우

모듈 비활성화

이 모듈의 페이지에 명시된 바와 같이

Drupal 8은 여러 가지 이유로 모듈을 비활성화하는 기능을 제거했습니다. # 1199946 참조 : 비활성화 된 모듈은 복구 할 수없는 상태이므로 "비활성화"기능을 제거 하고 다양한 코어 및 컨트 리뷰 션 된 모듈 의 대기열에있는 다른 많은 문제를 해결 해야 합니다.

이 모듈은 UI에서 또는 Drush로 모듈을 (일시적으로) 비활성화하는 기능을 다시 제공합니다. 모듈을 비활성화 한 후에는 콘텐츠, 구성 또는 사이트에 대한 보증이 없습니다.


0

이 방법으로 Drupal 8 인스턴스에서 "better_messages"라는 모듈을 수동으로 제거했습니다. "better_messages"모듈을 설치하자마자 사이트가 다운되었습니다. 따라서 사용자 인터페이스에서 모듈을 제거 할 방법이 없었습니다. Drush를 설치하지 않았습니다. 포럼에서 많은 설정을 수행했지만 이것이 마침내 효과가 있습니다.

1 모듈을 모듈 폴더의 old_better_messages로 이름을 변경했습니다.

  1. URL을 통해 http : // IP : port / foldername / rebuild.php를 실행하십시오 . 이를 통해 사이트가 돌아 왔지만 읽기 전용 모드로 돌아갔습니다. 관리자 활동을하거나 기사를 편집 할 수 없습니다.

  2. 다음 명령을 사용하여 데이터베이스에서 항목을 삭제했습니다.

key_value에서 삭제 collection = 'system.schema'AND name = 'better_messages';

제 경우에는 데이터베이스에 항목이 없습니다. 나는 이전에했던 다양한 스턴트 때문에 삭제되었을 수 있다고 생각합니다.

  1. 그런 다음 DB Visualizer를 사용하여 캐시로 시작하는 모든 테이블에서 항목을 삭제했습니다.

문제가 해결되었습니다. 이것은 https://www.drupal.org/node/2487215 에 대한 나의 해석을 기반으로합니다.


0

위의지가 리우스의 대답은 일종의 일이었습니다 ...

// 구성을 읽습니다.

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

어떤 해야 같은 일을. Jigarius가 쓴 것처럼 왜 작동하지 않는지 확실하지 않습니다 ...

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.