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

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

Есть ли лучшее решение для решения этой проблемы, например, для модуля Contrib?

33 голоса | спросил Logi 16 FriEurope/Moscow2011-12-16T14:50:55+04:00Europe/Moscow12bEurope/MoscowFri, 16 Dec 2011 14:50:55 +0400 2011, 14:50:55

14 ответов


26

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

  

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

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

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

drush cc registry

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

//установить registry_rebuild
drush dl registry_rebuild
//перестраиваем реестр
drush rr
ответил Cyclonecode 16 FriEurope/Moscow2011-12-16T15:57:29+04:00Europe/Moscow12bEurope/MoscowFri, 16 Dec 2011 15:57:29 +0400 2011, 15:57:29
10

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

Шаг 1: Замените сайты /все /модули сайтами /all /modules /contrib

UPDATE system SET filename = REPLACE (имя файла, «сайты /все /модули», «сайты /все /модули /вклад»);
UPDATE registry SET filename = REPLACE (имя файла, «сайты /все /модули», «сайты /все /модули /вклад»);
UPDATE registry_file SET filename = REPLACE (имя файла, «сайты /все /модули», «сайты /все /модули /вклад»);

Шаг 2: Замените сайты /все /modules /contrib с сайтами /все /модули /пользовательские для пользовательских модулей с расширением имен

UPDATE system SET filename = REPLACE (имя файла, 'sites /all /modules /contrib', 'sites /all /modules /custom') WHERE name LIKE 'my_custom_namespace_%';
UPDATE registry SET filename = REPLACE (имя файла, 'sites /all /modules /contrib', 'sites /all /modules /custom') WHERE name LIKE 'my_custom_namespace_%';
UPDATE registry_file SET filename = REPLACE (имя файла, 'sites /all /modules /contrib', 'sites /all /modules /custom') WHERE filename LIKE '% my_custom_namespace_%';

Шаг 3. Перемещение модулей dev на сайты /все /modules /dev

UPDATE system SET filename = REPLACE (имя файла, 'sites /all /modules /contrib', 'sites /all /modules /dev') WHERE name LIKE 'devel%';
UPDATE registry SET filename = REPLACE (имя файла, 'sites /all /modules /contrib', 'sites /all /modules /dev') WHERE name LIKE 'devel%';
UPDATE registry_file SET filename = REPLACE (имя файла, 'sites /all /modules /contrib', 'sites /all /modules /dev') WHERE filename LIKE '% devel%';

Шаг 4: Очистите кеши, чтобы вещи правильно загрузились

Кэш TRUNCATE TABLE
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'

Как только эти запросы запустились, что займет всего несколько секунд, нажмите «admin /config /development /performance» и очистите кеш, чтобы восстановить пути меню.

ответил Charlie Schliesser 29 SatEurope/Moscow2012-12-29T02:50:10+04:00Europe/Moscow12bEurope/MoscowSat, 29 Dec 2012 02:50:10 +0400 2012, 02:50:10
9

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

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

ответил greg_1_anderson 17 SatEurope/Moscow2011-12-17T19:13:54+04:00Europe/Moscow12bEurope/MoscowSat, 17 Dec 2011 19:13:54 +0400 2011, 19:13:54
7

Для записи есть большая команда drush для восстановления реестра: http://drupal.org/project/registry_rebuild

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

ответил jonhattan 3 J000000Tuesday12 2012, 12:08:48
5

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

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

  1. Поместите свой сайт в режим обслуживания в (sitename) /admin /config /development /maintenance
  2. Физически перемещайте модули в файловой системе.
  3. Очистите свои кеши в (sitename) /admin /config /development /performance или просто сохраните страницу с вашими модулями.

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

ответил John Laine 20 TueEurope/Moscow2011-12-20T23:12:42+04:00Europe/Moscow12bEurope/MoscowTue, 20 Dec 2011 23:12:42 +0400 2011, 23:12:42
4

Почему бы вам не попробовать модуль Registry Rebuild . Он работал каждый раз для меня.

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

  

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

ответил drupalastic 30 AMpWed, 30 Apr 2014 11:07:16 +040007Wednesday 2014, 11:07:16
3

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

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

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

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

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

ответил Pierre.Vriens 18 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowFri, 18 Sep 2015 23:52:02 +0300 2015, 23:52:02
2

Посетите /admin /build /modules, он перестроит пути в системной таблице. Иногда drupal больше не может загружаться, поэтому это решение не работает в этом случае. Если это не сработает, вы можете использовать Drush Rebuild Project Paths , как сказано в предыдущем ответ. Вы должны добавить новую команду drush перед тем, как сломать бутстрап. Чтобы добавить новую команду, зайдите в COMMANDS readme . раздел

ответил Zatox 27 Jpm1000000pmFri, 27 Jan 2012 21:03:05 +040012 2012, 21:03:05
2

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

pushd ~ # хорошо, если drush на вашем сайте сломан из-за перемещенных модулей
drush dl -y registry_rebuild
POPD
drush rr
ответил guaka 13 +04002014-10-13T15:21:10+04:00312014bEurope/MoscowMon, 13 Oct 2014 15:21:10 +0400 2014, 15:21:10
2

Я не уверен на 100% в истинном ответе drupal-esk, но по своему опыту:

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

** Этот модуль, который я переехал, НЕ имел .install-файл, поэтому я не уверен, что это важно.

ответил Exziled 18 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowFri, 18 Sep 2015 17:36:18 +0300 2015, 17:36:18
1

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

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

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

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

    UPDATE `system`
      SET `filename` = REPLACE (
        `Filename`,
        «Сайты /все /модули /организация»,
        'Профили /panopoly /модули /вно /организация'
      );
    
  2. Затем переустановите реестр:

    drush rr
    
ответил ergophobe 1 MaramSat, 01 Mar 2014 08:34:08 +04002014-03-01T08:34:08+04:0008 2014, 08:34:08
1

Drupal 7

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

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

drush sqlq "Ключ TRUNCATE; 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 --order-dump sql-dump | grep "sites /all /modules" # Изменить путь к старому.

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

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

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

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


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

UPDATE system SET filename = REPLACE (имя файла, «сайты /все /модули», «сайты /новые места /модули») ГДЕ
       filename LIKE "sites /all /modules /%" AND type = "module"
       И имя IN («мой», «модуль», «чей», «путь», «изменен»);

UPDATE registry SET filename = REPLACE (имя файла, «сайты /все /модули», «сайты /новые места /модули») ГДЕ
       filename LIKE "sites /all /modules /%"
       И модуль IN («мой», «модуль», «чей», «путь», «изменен»);
ответил kenorb 14 +04002014-10-14T21:53:56+04:00312014bEurope/MoscowTue, 14 Oct 2014 21:53:56 +0400 2014, 21:53:56
1

Рекомендуется переместить модули в вкладки contrib /dev /patched /custom. Однако нет никаких успехов в производительности, это делается по практическим и эстетическим причинам. Это облегчит жизнь будущих разработчиков.

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

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

Обновление. Для перемещения модулей, таких как сущность API, может потребоваться перестройка реестра. Просмотрите страницу registry_rebuild .

ответил gbyte.co 18 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowFri, 18 Sep 2015 17:41:02 +0300 2015, 17:41:02
-3

Вы можете просто добавить символическую ссылку в сайтах /all /modules diretory, указывающую на сайты /all /contrib. Я не уверен, решает ли он вашу проблему. Существуют и другие решения, включая профиль установки или файл make-файла. Я не знаю достаточно, чтобы предоставить подробную информацию о них, но, по крайней мере, это направление, на которое вы можете смотреть.

ответил lexicant 17 SatEurope/Moscow2011-12-17T01:26:42+04:00Europe/Moscow12bEurope/MoscowSat, 17 Dec 2011 01:26:42 +0400 2011, 01:26:42

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132