Как безопасно переместить модуль в другую папку?

7

Я создал модуль через консоль Drupal, к сожалению, он не был помещен в собственную папку, а прямо в нее /modules/custom. Прежде чем я заметил, куда он ушел, я включил модуль.

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

То же самое не верно для Drupal 8; Я переместил файлы в подпапку, перестроил кеш, и все запросы говорят мне, что Drupal не может включить требуемый файл. Конкретный файл - это блочный класс, и путь, который пытается найти Drupal, находится там, где он был раньше , а не туда, куда я его переместил.

Часть кода возражает против Symfony ApcClassLoader, поэтому я думаю, мне нужно очистить что-то, что немного выше головы Drupal, чтобы обновить эту ссылку на путь.

Как я могу это сделать?

Деинсталляция и переустановка модуля действительно работает, но как только будут сохранены важные данные, это не вариант.

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

Клайв
источник
Итак, если вы создаете first.module и second.module с помощью Drupal Console, вы найдете оба этих файла в / modules / custom? Я никогда не буду создавать модуль с этим, тогда.
kiamlaluno
У меня была старая версия @kiamlaluno, обновленная сейчас, и этой проблемы нет. Проблема в этом вопросе, безусловно, заключается в том, что на самом деле она ухудшается. Я только что добавил совершенно новый модуль с совершенно новым блоком, и теперь Drupal не будет поднимать этот блок для страницы администратора. Что-то действительно испорчено в его конфигурации, но я не знаю, где искать: /
Клайв
Является ли ApcClassLoader::findFile()получение неправильного пути от apc_fetch(), или декорированного загрузчик классов возвращение неправильного пути?
gapple

Ответы:

11

Просто перезапустите Apache. Кэш APC будет перестроен.

Вы также можете попробовать нажать rebuild.php или запустить drush cr. Все они пытаются очистить кэш APC.

Berdir
источник
Да, я сделал то же самое (nginx + fpm, но перезапустил оба раза), плюс запустил apc_flush_cache напрямую и даже переключался между php5 и 7 совершенно разными магазинами, все еще видел проблему, но я предполагаю, что это что-то с моей настройкой специально, логика говорит, что один из этих методов это исправит. завтра рассмотрим поближе
Клайв
Ночное время, кажется, исправило это, так что я собираюсь в этот момент добавить это ...
Клайв
Помог rebuild.php (открыть в браузере), перезапуск apache и очистка кеша не помогли.
drupalfan
Я сделал очистку кеша, запустил rebuild.php, перезагрузил apache. Все еще не работает, получая ту же ошибку. Блокирует ссылку на старый путь модуля.
АРУН
0

Другое решение находится в вашем settings.php:

 /**
 * Class Loader.
 *
 * If the APC extension is detected, the Symfony APC class loader is used for
 * performance reasons. Detection can be prevented by setting
 * class_loader_auto_detect to false, as in the example below.
 */
$settings['class_loader_auto_detect'] = FALSE;
rpayanm
источник
-1

Вы должны очистить друпальный кеш. Вот как это сделать с помощью drush:

drush cr
Somerussian
источник
Мы говорим здесь о Drupal 8, это выше работает для Drupal 7.
Марко
Спасибо Марко, обновил мой ответ для решения drupal 8.
Somerussian