Drupal - перемещение папки модуля - PullRequest
14 голосов
/ 16 апреля 2010

Безопасно ли перемещать мои модули

  • Из сайтов / всех / модулей /
  • На сайты / все / модули / вклад и сайты / все / модули / пользовательские

на производственной площадке?

То есть, автоматически ли Drupal обнаруживает, что модуль все еще там, но по новому пути?

Ответы [ 10 ]

21 голосов
/ 09 апреля 2012

Drupal версии до D6 сохраняли расположение модуля в системной таблице, но начиная с D7, есть несколько мест, где записывается путь (например, таблицы registry и registry_file), поэтому простое перемещение папки и очистка кэша не приведут сделать это, скорее всего, приведет к значительным проблемам.

Последовательность шагов, которые вы можете попробовать:

  1. Резервное копирование вашей базы данных
  2. Регистрация вашего кода в системе контроля версий
  3. Выполнить следующие запросы:

    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')
    
  4. Перемещение папок

  5. Прогон: drush cc all
3 голосов
/ 21 декабря 2012

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

Шаг 1. Обновите все «пользовательские» модули, если вам повезло, что они совместно используют пространство имен:

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

Шаг 2 - Обновите все модули 'dev':

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

Шаг 3 - Обновить все модули 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')

Затем бросьте все свои модули в соответствующие папки sites/all/modules/contrib|custom|dev, очистите кеш, и все готово.

3 голосов
/ 16 апреля 2010

Если вы переместите модуль, Drupal увидит, что старый сломан, а новый существует. Он не будет предполагать, что это одно и то же - просто переехал.

2 голосов
/ 10 января 2013

Если вы находитесь на D7, то эта страница документации на drupal - лучший способ продвинуть модули вокруг - Как перемещать модули и темы

2 голосов
/ 16 апреля 2010

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

1 голос
/ 30 апреля 2014

не забудьте использовать этот модуль после изменения папки модулей:

https://drupal.org/project/registry_rebuild

1 голос
/ 21 августа 2013

На самом деле вам нужно только обновить системную таблицу, а затем сделать следующее:

drush rr 

и, может быть ..

drush cc all

drush rr
1 голос
/ 24 марта 2013

использование http://drupal.org/project/registry_rebuild «Перестройка реестра также перестроит системную таблицу, чтобы расположить модули в нужном месте, чтобы вы могли загрузиться».

  • резервное копирование БД
  • загрузил «модуль»
  • перемещены все модули
  • запустить скрипт sites / all / modules / registry_rebuild / registry_rebuild.php
  • перезагрузить сайт
  • если вы получили ошибку, очистите кеш браузера и все снова работает
1 голос
/ 31 августа 2011

Хорошо иметь подпапку / contrib и / custom для модулей. Для D7, особенно если вы используете сущность, вы должны отключить модули, переместить их, а затем снова включить. Это работает.

Альтернатива - переместить модули в подпапки и очистить кеш, иногда не работает и может генерировать WSOD

0 голосов
/ 08 мая 2012

Вы можете безопасно переместить большинство модулей, если впоследствии очистите кеш (drush cc all).

Однако , некоторые модули, особенно ctools, хранят информацию о пути к файлам в местах, отличных от системной таблицы или кэшей. Возможно, вам придется оставить эти модули в их первоначальном месте, но вы все равно можете переместить все остальное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...