Я безуспешно искал ответы на этот вопрос. Из того, что я наблюдаю в структуре базы данных, расположение модулей указано в таблице «system». Единственное решение, которое у меня есть, - написать SQL-запрос для обновления столбца «имя файла».
Есть ли лучшее / более чистое решение для решения этой проблемы, например, модуль contrib?
источник
registry_file
обрезать свою таблицу, что заставит drupal повторно сканировать все файлы и перестроить таблицу.DELETE FROM registry_file;
и добавил вызовrebuild_registry()
в мойpage.tpl.php
.Я восстановил резервную копию с производства локально и попытался просто переместить вещи и нажать admin / modules или запустить registry_rebuild (), но это не остановило появление фатальных ошибок. Это имеет смысл для меня, так как некоторые модули могут использовать include или что-либо в их hook_init (), или у вас может быть установлен путь к маршрутизатору меню, который зависит от модуля, или include, который Drupal не может найти при начальной загрузке. В конечном счете, это то, что я сделал (ваши пути могут отличаться):
Шаг 1: Заменить сайты / все / модули на сайты / все / модули / contrib
Шаг 2: Замените сайты / все / модули / вклада сайтами / всеми / модулями / на заказ для пользовательских модулей с пространством имен
Шаг 3: Переместите модули разработчика в сайты / все / модули / dev
Шаг 4: Очистите кеш, чтобы все правильно загрузилось
Примечание. Если вы используете пользовательский модуль или ресурс, например LoginToboggan, для обработки 403 (доступ запрещен) и вы вышли из системы во время этого процесса, вам может потребоваться обновить
include_file
столбец вmenu_roter
таблице, чтобы использовать новый путь для включаемого файла. , Это, вероятно, редкое явление.UPDATE menu_router SET include_file = 'sites/all/modules/custom/my_custom_namespace/includes/foo.inc' WHERE path = 'access-denied'
Как только эти запросы будут выполнены - что займет всего лишь доли секунды - включите admin / config / development / performance и очистите кэш, чтобы перестроить пути меню.
источник
update menu_router set include_file = 'sites/all/modules/contrib/logintoboggan/logintoboggan.admin.inc' WHERE path = 'admin/config/system/logintoboggan'; update menu_router set include_file = 'sites/all/modules/contrib/logintoboggan/logintoboggan.validation.inc' WHERE path = 'toboggan/revalidate/%'; update menu_router set include_file = 'sites/all/modules/contrib/logintoboggan/logintoboggan.validation.inc' WHERE path = 'user/validate/%/%/%';
Попробуйте крутой инструмент от Марка Соннабаума: Drush Rebuild Projects Paths . Это автоматизирует процесс; отлично работал для меня. Использует Drush , конечно.
Я поддержу предположение, что вы попробуете это на копии базы данных вашего сайта.
источник
Для записи есть отличная команда drush для перестройки реестра: http://drupal.org/project/registry_rebuild
На странице проекта много информации.
источник
sites/all/modules
которые должны были быть перемещены вcontrib
подкаталог. Все, что мне нужно было,drush dl registry_rebuild; mv OLD_PATH/module NEW_PATH/module; drush rr
drush rr --fire-bazooka
приводит к ошибкам, ноdrush rr
это хорошо.Во-первых, всегда делайте резервные копии своей базы данных, настолько просто, что вы будете бить себя, если что-то пойдет не так, и вы не сделали резервную копию.
Я не уверен, имеет ли это значение, если вы отключите модули или нет; Вы можете сделать это, на всякий случай. Тогда сделайте это:
Все сделано! Drupal проведет повторный поиск всех установленных модулей.
источник
Почему бы вам не попробовать перестройку реестра модуль . Это работало каждый раз для меня.
Вот цитата об этом (со страницы проекта модуля):
источник
Вы можете использовать модуль Registry Rebuild , который интегрируется с Drush через
Drush RR
команду.В основном то, что вы делаете, это следующие шаги:
Я впервые узнал / обнаружил это с помощью подкаста DrupalEasy # 133 , который дополнительно объясняет, как можно использовать этот модуль / drush cmd.
PS: Конечно, сначала сделайте резервную копию вашего сайта ...
источник
Посетите / admin / build / modules, он восстановит пути в системной таблице. Иногда drupal больше не может загрузиться, поэтому в этом случае это решение не работает. Если это не работает, вы можете использовать Drush Rebuild Project Paths, как сказано в предыдущем ответе. Вы должны добавить новую команду drush перед тем, как прервать загрузку. Чтобы добавить новую команду, ознакомьтесь с разделом КОМАНДЫ readme.
источник
У меня были некоторые проблемы с
drush dl
неработающим из-за проблем с каталогом модулей. Обычно мне нравятся стековые ответы, которые я могу просто вставить, чтобы все заработало. Здесь вы найдете несколько строк, которые установят Drush Rebuild Registry и запустят его на вашем сайте, если вы уже находитесь в правильном каталоге сайта.источник
Я не уверен на 100% в правильном ответе drupal-esk, но по моему опыту:
Я случайно переместил одну из своих пользовательских папок модуля в другую пользовательскую папку модуля при FTP-соединении с сервером. Они оба все еще работали. Drupal, похоже, распознал его как отдельный модуль, даже когда он находился в папке другого модуля. Мне не пришлось отключать модуль.
** У этого модуля, который я переместил, НЕ было файла .install, поэтому я не уверен, имеет ли это значение.
источник
В дистрибутивах Drupal это плохо обрабатывается, поэтому в последнее время после того, как случайно оказался экземпляр Entity API в
sites/all/
на сайте Panopoly, ни один из этого работал. Перестройка реестра, загрузка страницы модулей и все остальное вызвало фатальную ошибку.Отключить модуль тоже непросто, если вам нужно переместить что-то вроде Entity API, что требуется множеству других модулей в Panopoly.
Чтобы решить эту проблему, для Entity API вы должны сделать что-то вроде этого:
Обновите путь в системной таблице:
Затем перестройте реестр:
источник
Drupal 7
Прежде всего, попробуйте
drush rr
.Если это не сработает, после перемещения файлов попробуйте следующие команды Drush в корневом каталоге Drupal:
Если приведенное выше не работает, найдите таблицу, в которой все еще содержится старая информация о пути, с помощью:
Если ничего не найдено, значит, это ваш внешний кеш.
Если это так, не забудьте перезапустить их, например:
Смотрите больше: Какой метод используется для очистки кешей в Drupal?
В качестве альтернативы вы можете попробовать следующие запросы MySQL после перемещения файлов:
источник
Перемещение ваших модулей в подпапки contrib / dev / patched / custom рекомендуется. Однако прироста производительности нет, это сделано по практическим и эстетическим соображениям. Это облегчит жизнь будущим разработчикам.
Вы можете без проблем переместить большинство модулей contrib во вложенные папки на реальном сайте. Вы должны очистить кеш после этого. Если вы не используете drush и обнаруживаете, что больше не можете получить доступ к странице очистки кэша, вам придется посетить /update.php или вручную обрезать таблицы кэша. Я только когда-либо должен был сделать последний бит при перемещении модуля API объекта.
Перемещение основных модулей технически возможно, но я бы не советовал и не вижу какой-либо уважительной причины для этого.
Обновление: перемещение модулей, таких как API-интерфейс сущностей, может потребовать перестройки реестра. Проверьте страницу Registry_Rebuild .
источник
Вы можете просто добавить ссылку sym в директорию sites / all / modules, указывающую на сайты / all / contrib. Я не уверен, решит ли это вашу проблему. Есть и другие решения, в том числе установочный профиль или файл drush make. Я не знаю достаточно, чтобы предоставить подробности о них, но по крайней мере это направление, на которое вы можете посмотреть.
источник