题
当我尝试删除用户整个网站悬挂时,即Drupal不再响应。什么会导致那件事?
该站点没有安装任何特殊的用户配置文件模块。
编辑:
只有一个带有钩子的自定义(自制)模块可以打开 $op
. 。 “删除”案例看起来并不奇怪:
case 'delete':
$sql = "DELETE FROM {mynewsletter_users} WHERE uid = %d";
db_query($sql, $account->uid);
break;
看起来对我不好。不应调用钩子圈。
编辑:
问题本身就消失了。不知道发生了什么。
解决方案
对我来说,这发生在发生错误的结果时发生的 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应该给您一个很好的线索,了解根部问题是什么。其中一个模块最有可能调用一些无反应性的服务。
其他提示
我要做的第一件事是设置具有Live Server的副本以进行本地测试的本地VM。理想情况下,这是与 dd
或类似。
看看是否有任何实施 hook_user
. 。对于D5-d6站点,我使用递归grep(使用 ACK)从站点根来定位这些。删除此代码,看看该站点是否仍然悬挂。
使用mysql 慢速查询日志 看看它是否有任何提示。使用PS和TOP查看Web服务器上实际发生的事情。
我认为D5没有锁定(D6有 lock_acquire 在 lock.inc)
如果您可以解释服务器 /锁定 /锁定服务器后如何设法恢复,这也将有所帮助。