Drupal을 다시 설치하거나 Drupal을 새로 설치 한 테이블을 손상된 인스턴스에 복사하여이 문제를 해결할 수 있습니다.
또는 다음 해결 방법을 시도 할 수 있습니다 (Drupal 인스턴스가 이미 손상된 경우에만 수행).
예를 들어 이전 레지스트리 테이블을 먼저 백업하십시오.
drush sqlq "CREATE TABLE registry_bak LIKE registry; INSERT INTO registry_bak SELECT * FROM registry;"
drush sqlq "CREATE TABLE system_bak LIKE system; INSERT INTO system_bak SELECT * FROM system;"
부트 스트랩 캐시 및 레지스트리 테이블을 지우십시오.
drush sqlq "TRUNCATE cache_bootstrap; TRUNCATE registry"
기본 데이터를 레지스트리 테이블에 삽입하십시오.
drush sqlq 'INSERT INTO registry (name, type, filename) VALUES ("SelectQueryExtender", "class", "includes/database/select.inc"), ("DrupalDefaultEntityController", "class", "includes/entity.inc");'
drush eval "registry_update();"
캐시를 지우십시오.
drush -y cc all
누락 된 클래스로 인해 4.에서 캐시 지우기가 실패한 경우 다음 중 하나를 수행 할 수 있습니다.
a) 누락 된 클래스를 수동으로 추가하십시오 (예 :
$ drush -y cc all
Fatal error: Class 'Entity' not found in profile2.module on line 593
$ grep -Rwl "^class Entity" .
./sites/all/modules/entity/includes/entity.inc
$ drush sqlq 'INSERT INTO registry (name, type, filename) VALUES ("Entity", "class", "sites/all/modules/entity/includes/entity.inc");'
$ drush -y cc all # testing...
# If Fatal error:, repeat 5a. again.
또는:
b) 다음과 같이 실패한 contrib 모듈 (예 : profile2, 규칙)을 비활성화하십시오.
drush sqlq 'UPDATE system SET status = 0 WHERE name = "failing_module"'
4부터 시작하여 단계를 반복하십시오.
무언가가 깨진 것보다 더 깨진 경우 다음을 수행하여 테이블을 원래 지점 (1 단계에서 수행)으로 복원 할 수 있습니다.
drush sqlq "TRUNCATE registry; INSERT INTO registry SELECT * FROM registry_bak;"
drush sqlq "TRUNCATE system; INSERT INTO system SELECT * FROM system_bak;"
다시 시도하십시오.
참조 : 설치된 모듈을 / sites / all / modules / *에서 / sites / all / contrib / modules / *로 이동하는 방법
registryDrupal webroot에서 다음 스크립트를 실행하여 테이블을 다시 작성할 수도 있습니다.
grep -ERo "^(\s+)?(abstract )?class (\S+)" . | tr ':' ' ' | sed "s/abstract //g" | awk '{print "INSERT INTO registry (filename, type, name) VALUES (\x27"$1"\x27,\x27"$2"\x27,\x27"$3"\x27);"}' | $(drush sql-connect) -f
정규 표현식에 대한 Mike 의 도움 덕분 입니다.
drush rr실패한 곳을 구 했습니다