Как перемещать установленные модули из/сайтов/all/modules/* to/sites/all/contib/modules/*

drupal.stackexchange https://drupal.stackexchange.com/questions/17657

  •  22-10-2019
  •  | 
  •  

Вопрос

Я искал ответы на этот вопрос без повезло. Из того, что я наблюдаю в структуре базы данных, местоположение для модулей указано в таблице «Система». Единственное решение, которое у меня есть, - это написать запрос SQL, чтобы обновить столбец «файл».

Есть ли лучшее/более чистое решение в решении этого, например, модуль CONTIB?

Это было полезно?

Решение

Вам нужно только перемещать свои модули в ваше новое местоположение и восстановить регистрацию. Когда реестр восстанавливает путь к модулям, будет обновлен. Проверять registry_rebuild().

Rescans All Code в модулях или включает в себя каталоги, хранение местоположения каждого интерфейса или класса в базе данных.

Хотя я бы порекомендовал вам сделать резервную копию базы данных перед тестированием.

Если вы используете Drush, вы также можете восстановить реестр, используя следующую команду:

drush cc registry

Вы также можете установить registry_rebuild командовать Drush:

// install registry_rebuild
drush dl registry_rebuild
// rebuild the registry
drush rr

Другие советы

Я восстановил резервную копию из производства локально и попытался просто перемещать вещи и ударить администратора/модулей или запустить registry_rebuild (), но это не остановило смертельные ошибки от брошенных. Это имеет смысл для меня, поскольку некоторые модули могут использовать, включающие в себя или что -то еще в их hook_init (), или у вас может быть набор маршрутизатора меню, который зависит от модуля или включить, что Drupal не может найти в начальной загрузке. В конечном счете, это то, что я сделал (ваши пути могут быть разными):

Шаг 1: замените сайты/все/модули на сайты/All/Modules/Contrib

UPDATE system SET filename = REPLACE(filename, 'sites/all/modules', 'sites/all/modules/contrib');
UPDATE registry SET filename = REPLACE(filename, 'sites/all/modules', 'sites/all/modules/contrib');
UPDATE registry_file SET filename = REPLACE(filename, 'sites/all/modules', 'sites/all/modules/contrib');

Шаг 2: Замените сайты/All/Modules/Contrib с сайтами/All/Modules/Custom для пользовательских модулей с именами.

UPDATE system SET filename = REPLACE(filename, 'sites/all/modules/contrib', 'sites/all/modules/custom') WHERE name LIKE 'my_custom_namespace_%';
UPDATE registry SET filename = REPLACE(filename, 'sites/all/modules/contrib', 'sites/all/modules/custom') WHERE name LIKE 'my_custom_namespace_%';
UPDATE registry_file SET filename = REPLACE(filename, 'sites/all/modules/contrib', 'sites/all/modules/custom') WHERE filename LIKE '%my_custom_namespace_%';

Шаг 3: Переместите модули Dev в сайты/All/Modules/Dev

UPDATE system SET filename = REPLACE(filename, 'sites/all/modules/contrib', 'sites/all/modules/dev') WHERE name LIKE 'devel%';
UPDATE registry SET filename = REPLACE(filename, 'sites/all/modules/contrib', 'sites/all/modules/dev') WHERE name LIKE 'devel%';
UPDATE registry_file SET filename = REPLACE(filename, 'sites/all/modules/contrib', 'sites/all/modules/dev') WHERE filename LIKE '%devel%';

Шаг 4: Очистите кэши, чтобы все было загружаться должным образом

TRUNCATE TABLE cache
TRUNCATE TABLE cache_bootstrap
TRUNCATE TABLE cache_menu
TRUNCATE TABLE cache_page
TRUNCATE TABLE cache_path

Примечание: Если вы используете пользовательский модуль или вклад, такой как 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'

После того, как эти запросы выполняются - что займет только долю секунды - нажмите на администрацию/конфигурацию/разработку/производительность и очистите кэш, так что пути меню восстанавливаются.

Попробуйте крутой инструмент от Mark Sonnabaum: Drush Rebuild Project Pafts. Анкет Он автоматизирует процесс; отлично работал для меня. Использование Вырубка, конечно.

Однако я подчеркну предложение, чтобы вы попробовали это в копии базы данных вашего сайта.

Для протокола, есть отличная команда Drush, чтобы восстановить реестр: http://drupal.org/project/registry_rebuild

На странице проекта много информации.

Во-первых, всегда Резервную копию базы данных, так что просто сделать, вы пьете себя, если что -то пойдет не так, и вы не резервные копии.

Я не уверен, имеет ли это значение, отключите ли вы модули или нет; Вы можете сделать это на всякий случай. Тогда сделайте это:

  1. Поместите свой сайт в режим обслуживания по адресу (SiteName)/Admin/Config/Development/Maintenge
  2. Физически переместите свои модули в файловой системе.
  3. Очистите свои кэши по адресу (SiteName)/Admin/Config/Development/Performance, или просто повторьте страницу модулей.

Все сделано! Drupal будет повторно поиск для всех установленных модулей.

Почему бы тебе не попробовать Реестр восстановления модуль. Это сработало каждый раз для меня.

Вот цитата об этом (со страницы проекта модуля):

В Drupal 7 бывают случаи, когда реестр становится безнадежно шарничным, и вам необходимо восстановить реестр (список классов PHP и файлы, с которыми они идут). Иногда, однако, вы не можете выполнять эту обычную активность кеша, потому что некоторый класс требуется, когда система пытается загрузиться.

Вы можете использовать Реестр восстановления модуль, который интегрируется с Drush через Drush RR командование

В основном вы делаете эти шаги:

  1. Переместите свои модули в другой каталог и
  2. Затем восстановление реестра восстановит системную таблицу, чтобы получить модули в нужном месте.

Я впервые узнал/обнаружил это через Drupaleasy Podcast #133, что также объясняет, как можно использовать этот модуль / Drush CMD.

PS: Конечно, сначала выполните резервную копию вашего сайта ...

Посещение/администратор/сборка/модули Он восстановит пути в системной таблице. Иногда Drupal больше не может начаться, поэтому в этом случае это решение не работает. Если он не работает, вы можете использовать Drush Rebuild Project Pafts Как сказано в предыдущем ответе. Вы должны добавить новую команду Drush, прежде чем взломать начальную загрузку. Чтобы добавить новую команду, проверьте Прочти меняраздел команд

У меня были проблемы с drush dl Не работает из -за проблем каталогов модулей. Обычно мне нравятся ответы на стек, которые я могу просто вставить, чтобы заставить вещи работать. Здесь вы найдете пару строк, которые установит реестр перестройки Drush и запустить его на своем сайте, если вы уже находитесь в соответствующем каталоге сайта.

pushd ~  # good if drush on your site is broken because of moved modules
drush dl -y registry_rebuild
popd 
drush rr

Я не на 100% уверен в настоящем ответе Drupal-ESK, но по моему опыту:

Я случайно переместил одну из своих пользовательских папок модуля в другую папку модуля при проведении сервера. Они оба все еще работали. Drupal, казалось, узнал его как отдельный модуль, даже когда он был в папке другого модуля. Мне не нужно было отключать модуль.

** В этом модуле, который я перевел, не было файла .install, поэтому я не уверен, имеет ли это значение.

Распределения Drupal не справляются с этим хорошо, так что недавно после случайного заканчивания копией Entity API в sites/all/ На панопольском сайте ничего из этого не сработало. Реестр восстановления, загрузка страницы модулей, а все остальное вызвало фатальную ошибку.

Отключение модуля также не проста, если вам нужно переместить что -то вроде API объекта, которое требуется тоннам других модулей в Панополии.

Чтобы решить это, для API сущности вы бы сделали что -то вроде этого:

  1. Обновите путь в таблице системы:

    UPDATE `system` 
      SET `filename` = REPLACE(
        `filename`, 
        'sites/all/modules/entity', 
        'profiles/panopoly/modules/contrib/entity'
      );
    
  2. Затем восстановите реестр:

    drush rr
    

Drupal 7

Прежде всего попробуйте drush rr.

Если это не сработает, после перемещения файлов попробуйте следующие команды Drush в вашем Drupal Root Dir:

drush sqlq "TRUNCATE cache; TRUNCATE cache_bootstrap;"
php -r "define('DRUPAL_ROOT', getcwd()); require_once DRUPAL_ROOT . '/includes/bootstrap.inc'; drupal_bootstrap(DRUPAL_BOOTSTRAP_SESSION); registry_rebuild(); registry_update(); cache_clear_all();"
drush -y cc all

Если выше не работает, найдите таблицу, в которой все еще есть старая информация о пути:

drush --ordered-dump sql-dump | grep "sites/all/modules" # Change the path to the old one.

Если никто не найден, это означает, что это ваш внешний кэш.

Если так, не забудьте перезапустить их, например:

killall -HUP memcached
drush eval "function_exists('xcache_clear_cache') && xcache_clear_cache();"

Узнать больше: Какой метод используется для очистки кэша в Drupal?


В качестве альтернативы вы можете попробовать следующие запросы MySQL после перемещения файлов:

UPDATE system SET filename = REPLACE(filename, "sites/all/modules", "sites/newplace/modules") WHERE
       filename LIKE "sites/all/modules/%" AND type = "module"
       AND name IN ("my", "module", "whose", "path", "changed");

UPDATE registry SET filename = REPLACE(filename, "sites/all/modules", "sites/newplace/modules") WHERE
       filename LIKE "sites/all/modules/%"
       AND module IN  ("my", "module", "whose", "path", "changed");

Рекомендуется перемещение ваших модулей в COPR/DEV/PATCHED/Custom. Однако нет никаких повышений производительности, это делается по практическим и эстетическим причинам. Это облегчит жизнь будущих разработчиков.

Вы можете перемещать большинство модулей вклад в подпапки без проблем на живом сайте. Вы должны очистить кэши впоследствии. Если вы не используете Drush и обнаружите, что больше не можете получить доступ к странице очистки кэша, вам придется посетить /update.php или вручную усечь таблицы кэша. Мне приходилось делать последний бит только при перемещении модуля API объекта.

Перемещение основных модулей технически возможно, но я бы не рекомендовал его и не вижу никакой веской причины для этого.

Обновление: движущиеся модули, такие как API Entity, могут потребовать восстановления реестра. Проверьте Registry_rebuild страница.

Вы можете просто добавить ссылку Sym в сайты/All/Modules Diretory, указывающие на сайты/All/Contrib. Я не уверен, решает ли это вашу проблему. Есть и другие решения, включая профиль установки или файл Drush. Я не знаю достаточно, чтобы предоставить подробности о них, но, по крайней мере, это направление, на которое вы можете посмотреть.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с drupal.stackexchange
scroll top