2010-03-24 4 views
1

Я только что установил модуль ACL и Content Access. После того, как я разрешил их, меня попросили перестроить разрешения. Мне все нормально.Drupal: Как долго нужно перестраивать разрешения

Однако я установил страницу разрешений «rebuild», запущенную около 40 минут назад, и она все еще говорит «Инициализация». Сколько времени это займет? Я что-то не так?

ответ

0

Просто обновите страницу. Через каждые несколько секунд перестроить perms :).

+0

Сделали ... пару раз. Есть ли что-нибудь, что я могу сделать/проверить? – Shaun

+0

Немного больше часа, и это отсортировано ;-) – Shaun

4

Стандартная длительность «перестроить perms» примерно пропорциональна количеству узлов, умноженному на количество включенных модулей доступа.

На сайте с узлами 100k вы можете легко взять более 24 часов для переустановки разрешений. Это означает, что вы просто не хотите делать это в интерактивном режиме. Но вы можете запустить эту перестройку из drush или использовать один из более быстрых нестандартных методов восстановления.

+0

Как бы вы перестроили разрешения на производственный сайт? – Rimian

+0

В основном: запустите скрипт CLI (drush), который петли на module_invoke_all ('node_access_records', $ node) для всех узлов строит файл данных (не-DB) в этом цикле. Затем, как только он будет завершен, TRUNCATE node_access и LOAD DATA INFILE INTO node_access. И, наконец, сообщите Drupal, что это делается путем вызова node_access_needs_rebuild (FALSE); Уточните в случае необходимости ограничения объема оперативной памяти/нагрузки и возможность изменения прав узла во время цикла восстановления. Мягко разработанный вариант позволил нам отказаться от перестроек от 24 часов до 30 минут. – FGM

+0

'FGM': не могли бы вы поделиться своим собственным скриптом Drush? Это очень помогло бы нам. – Max

3

Чтобы сделать это с помощью Drush, использование:

Drush PHP-Eval 'node_access_rebuild();'

0

Примечание. Если вам требуется 24 часа для восстановления на сайте с 100K узлами, что-то не так. Это занимает около 30 минут на сайте с 200K + FWIW. Для меньшего сайта это должно быть намного меньше; Я подозреваю, что у вас какая-то ошибка.

+0

node_access_rebuild() вызывает node_load() для каждого узла - поэтому в возможной проблеме может быть много модулей, реализующих hook_load() и выполняющих некоторые операции с heave. – webdevbyjoss

0

Быстрое решение может просто изменить тему на тему GARLAND по умолчанию, а затем повторить попытку восстановления прав доступа, скорее всего, это сработает. Как-то это JS-ошибки, которые заставляют его зацикливаться на инициализации.

И если ваш сайт имеет слишком много данных (узел, такой как 100k, 200K), вы также можете использовать этот скрипт, разместив его в php-файле в корневом каталоге Drupal и запустив его. Код находится под заголовком

WSODs Благодаря особенностям модулей -> Узел доступа

по этой ссылке:

http://drupal.org/node/158043