【问题标题】:Drupal: How long should it take to rebuild permissionsDrupal:重建权限需要多长时间
【发布时间】:2010-03-24 16:23:28
【问题描述】:

我刚刚安装了ACLContent Access 模块。启用它们后,我立即被要求重建权限。我被告知一切都很正常。

但是,我设置了大约 40 分钟前运行的“重建”权限页面,它仍然显示“正在初始化”。 需要多长时间?我做错了什么吗?

【问题讨论】:

    标签: drupal permissions acl


    【解决方案1】:

    标准的“重建权限”持续时间大致与节点数乘以启用的访问模块数成正比。

    在拥有 10 万个节点的站点上,您可以轻松地花费超过 24 小时来重建权限。这意味着您根本不想以交互方式进行操作。但是您可以从 drush 启动该重建或使用更快的非标准重建方法之一。

    【讨论】:

    • 如何在生产站点上重建权限?
    • 基本上:运行一个 CLI (drush) 脚本,该脚本在 module_invoke_all('node_access_records', $node) 上为所有节点循环在该循环中构建一个数据文件(非 DB)。然后,一旦完成,TRUNCATE node_access 和 LOAD DATA INFILE INTO node_access。最后,通过调用 node_access_needs_rebuild(FALSE); 告诉 Drupal 它已完成。根据您的 RAM/负载限制和重建循环期间节点权限更改的可能性进行必要的优化。对此进行了轻微改进的变体使我们能够将重建时间从 24 小时缩短到 30 分钟。
    • FGM: 你能分享你的自定义 Drush 脚本吗?这对我们有很大帮助。
    • @FGM 嗨,FGM - 你能得到一份你为此编写的脚本吗?
    • @BeardedGeek 那是几年前在客户网站上的:我不再可以访问它,但它或多或少正是我上面解释的内容。注意 LOAD DATA INFILE:这需要对 MySQL 服务器的本地访问。如果您在 PGSQL 或 MS SQL Server 上运行,可能需要不同的解决方案。
    【解决方案2】:

    要通过 drush 完成,请使用:

    drush php-eval 'node_access_rebuild();'

    【讨论】:

      【解决方案3】:

      只需刷新页面。烫发会在几秒钟内重建 :)。

      【讨论】:

      • 已经完成了……几次。有什么我可以做/检查的吗?
      • 一个多小时,它已经排序了 ;-)
      【解决方案4】:

      注意:如果您需要 24 小时在具有 100K 节点的站点上进行重建,则说明有问题。在具有 200K+ FWIW 的站点上,我们大约需要 30 分钟。对于较小的站点,它应该少得多;我怀疑您遇到了某种错误。

      【讨论】:

      • node_access_rebuild() 为每个节点调用 node_load() - 所以可能的问题可能是很多模块实现了 hook_load() 并在那里执行一些提升操作。
      【解决方案5】:

      一个快速的解决方案可以将您的主题改回默认的 GARLAND 主题,然后再次尝试重建权限,很可能它会起作用。有时是 JS 错误导致它卡在初始化上。

      如果您的站点有太多数据(节点如 100k、200K),您也可以使用此脚本,方法是将其放在 Drupal 根目录下的 php 文件中并运行它。代码在标题下

      特定模块导致的 WSOD -> 节点访问

      在这个链接上:

      http://drupal.org/node/158043

      【讨论】:

        猜你喜欢
        • 2011-11-11
        • 2011-01-29
        • 2012-06-30
        • 1970-01-01
        • 2011-10-26
        • 2017-11-07
        • 2021-08-08
        • 1970-01-01
        相关资源
        最近更新 更多