Це можна виправити, перевстановивши 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. не вдалося, через деякі інші відсутні класи, ви можете:
а) Додайте пропущені класи вручну, наприклад:
$ 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) Спробуйте вимкнути ці несправні модулі внеску (наприклад, 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;"
і спробуйте ще раз.
Дивіться також: Як перемістити встановлені модулі з / сайтів / всіх / модулів / * до / сайтів / всіх / contrib / модулів / *
Перебудову registryтаблиці можна досягти також за допомогою наступного сценарію, запущеного в Drupal 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
Завдяки допомозі Майка з регулярним виразом.
drush rrне вдалося