Что может привести к тому, что сайт висит при удалении пользователя?
Вопрос
Когда я пытаюсь удалить пользователей, весь сайт висит, то есть Drupal больше не отвечает. Что это может вызвать?
На сайте не установлены специальные модули профиля пользователя.
Редактировать:
Существует только один собственный (самостоятельный) модуль с hook_user, который включается $op
. Анкет Корпус «Удалить» выглядит непреодолительно:
case 'delete':
$sql = "DELETE FROM {mynewsletter_users} WHERE uid = %d";
db_query($sql, $account->uid);
break;
Для меня не выглядит плохо. Не должен вызывать круговой цикл Hook_user.
Редактировать:
Проблема исчезла сама по себе. Понятия не имею, что случилось.
Решение
Для меня это произошло, когда произошла неправильная конфигурация hook_user
в пользовательском модуле. В частности, проверьте все ваши реализации hook_user
чтобы убедиться, что нет никаких функций, которые приводят к дополнительным вызовам для hook_user
.
То есть, если у вас есть модуль, который вызывает foo_do_magic_to_user()
под hook_user
(или какая -то другая функция, которая попадает hook_user
), а также foo_do_magic_to_user()
вызовы user_save()
, тогда у вас есть бесконечная петля на руках.
Обновлять
Если вы абсолютно уверены, что это не hook_user
Цикл, тогда может быть любое количество связанных с модулем впособлениями. Они часто включают внешние услуги, которые не реагируют (например, отправляют электронное письмо «прощание», но Sendmail (или эквивалент) настраивается правильно).
В твоей обуви я бы попробовал:
1) Отключить все неточные модули и посмотреть, сохраняется ли проблема. Если это все еще происходит только с основными модулями, то у вас может быть более глубокая и более фундаментальная проблема (правильная версия PHP?)
2) Если не #1, то повторно вносите модули введите модули один за другим и посмотрите, какой из них вызывает проблему. Проверка этого модуля Hook_user должно дать вам хорошую подсказку относительно того, в чем заключается проблема с корнем. Скорее всего, один из модулей называет какую-то другую службу, которая не отвечает.
Другие советы
Самое первое, что я сделаю, - это настроить локальную виртуальную машину с репликой живого сервера для локального тестирования. В идеале это была бы копия, сделанная с dd
или похожие.
Посмотрите, реализуется ли что -нибудь hook_user
. Анкет Для сайтов D5-D6 я использую рекурсивный GREP (используя ак) из корня сайта, чтобы найти их. Удалите этот код и посмотрите, видит ли сайт.
Используйте MySQL Медленный журнал запросов Чтобы увидеть, есть ли у него какие -либо подсказки. Используйте PS и Top, чтобы увидеть, что на самом деле происходит на веб -сервере.
Я не думаю, что у D5 есть блокировка (у D6 lock_acquire в lock.inc)
Это также поможет, если бы вы могли объяснить, как вам удастся восстановить сервер, как только он /заблокирован /.