Не устанавливаются модули из composer

Аватар пользователя jura12 jura12 12 декабря 2020 в 15:16

обычно я ставил модули через админку. решил перевести сайт на установку и обновление через композер.
например если взять модуль token.
выключаю модуль через админку или drush,
устанавливаю через композер (он появился в web/modules/contrib/token),
удаляю старую папку из web/modules/token,
сбрасываю кэш drush cr,
включаю через админку или drush и
получаю HTTP ERROR 500.

в логах пишет что не может найти старый путь web/modules/token.

Warning: require(/var/www/korobkipro/mykorobkipro/web/modules/token/src/Element/TokenTreeTable.php): failed to open stream: No such file or directory в require() (строка 112 из /var/www/korobkipro/mykorobkipro/vendor/symfony/class-loader/ApcClassLoader.php)
#0 /var/www/korobkipro/mykorobkipro/web/core/includes/bootstrap.inc(600): _drupal_error_handler_real(2, 'require(/var/ww...', '/var/www/korobk...', 112, Array)
#1 /var/www/korobkipro/mykorobkipro/vendor/symfony/class-loader/ApcClassLoader.php(112): _drupal_error_handler(2, 'require(/var/ww...', '/var/www/korobk...', 112, Array)
#2 /var/www/korobkipro/mykorobkipro/vendor/symfony/class-loader/ApcClassLoader.php(112): require()
#3 [internal function]: Symfony\Component\ClassLoader\ApcClassLoader->loadClass('Drupal\\token\\El...')
#4 [internal function]: spl_autoload_call('Drupal\\token\\El...')
#5 /var/www/korobkipro/mykorobkipro/web/core/lib/Drupal/Component/Plugin/Factory/DefaultFactory.php(96): class_exists('Drupal\\token\\El...')
#6 /var/www/korobkipro/mykorobkipro/web/core/lib/Drupal/Core/Plugin/Factory/ContainerFactory.php(17): Drupal\Component\Plugin\Factory\DefaultFactory::getPluginClass('token_tree_tabl...', Array, 'Drupal\\Core\\Ren...')
#7 /var/www/korobkipro/mykorobkipro/web/core/lib/Drupal/Component/Plugin/PluginManagerBase.php(83): Drupal\Core\Plugin\Factory\ContainerFactory->createInstance('token_tree_tabl...', Array)
#8 /var/www/korobkipro/mykorobkipro/web/core/lib/Drupal/Core/Render/ElementInfoManager.php(141): Drupal\Component\Plugin\PluginManagerBase->createInstance('token_tree_tabl...', Array)
#9 /var/www/korobkipro/mykorobkipro/web/core/lib/Drupal/Core/Render/ElementInfoManager.php(111): Drupal\Core\Render\ElementInfoManager->createInstance('token_tree_tabl...')
#10 /var/www/korobkipro/mykorobkipro/web/core/lib/Drupal/Core/Render/ElementInfoManager.php(77): Drupal\Core\Render\ElementInfoManager->buildInfo('mybartik')
#11 /var/www/korobkipro/mykorobkipro/web/core/lib/Drupal/Core/Render/Renderer.php(300): Drupal\Core\Render\ElementInfoManager->getInfo('inline_template')
#12 /var/www/korobkipro/mykorobkipro/web/core/lib/Drupal/Core/Render/Renderer.php(200): Drupal\Core\Render\Renderer->doRender(Array, false)
#13 /var/www/korobkipro/mykorobkipro/web/core/lib/Drupal/Core/Template/TwigExtension.php(501): Drupal\Core\Render\Renderer->render(Array)
#14 /var/www/korobkipro/mykorobkipro/web/sites/default/files/php/twig/5fd4305a64ebe_field--node--title.html.t_DGem_l9nCX4pKPXVMBSUsCF7Y/AEynJj7EYHQctgAiNVbKtewLVBjsIs4zdXe_UTVNJCo.php(68): Drupal\Core\Template\TwigExtension->escapeFilter(Object(Drupal\Core\Template\TwigEnvironment), Array, 'html', NULL, true)
#15 /var/www/korobkipro/mykorobkipro/vendor/twig/twig/src/Template.php(455): __TwigTemplate_924b20b033f0be616a8ad1b9160ad262fa2b868c1591680effef93f0a7879725->doDisplay(Array, Array)
#16 /var/www/korobkipro/mykorobkipro/vendor/twig/twig/src/Template.php(422): Twig\Template->displayWithErrorHandling(Array, Array)
#17 /var/www/korobkipro/mykorobkipro/vendor/twig/twig/src/Template.php(434): Twig\Template->display(Array)
#18 /var/www/korobkipro/mykorobkipro/web/core/themes/engines/twig/twig.engine(64): Twig\Template->render(Array)
#19 /var/www/korobkipro/mykorobkipro/web/core/lib/Drupal/Core/Theme/ThemeManager.php(384): twig_render_template('core/themes/bar...', Array)
#20 /var/www/korobkipro/mykorobkipro/web/core/lib/Drupal/Core/Render/Renderer.php(431): Drupal\Core\Theme\ThemeManager->render('field', Array)
#21 /var/www/korobkipro/mykorobkipro/web/core/lib/Drupal/Core/Render/Renderer.php(200): Drupal\Core\Render\Renderer->doRender(Array, false)
#22 /var/www/korobkipro/mykorobkipro/web/core/lib/Drupal/Core/Entity/Controller/EntityViewController.php(81): Drupal\Core\Render\Renderer->render(Array)
#23 [internal function]: Drupal\Core\Entity\Controller\EntityViewController->buildTitle(Array)
#24 /var/www/korobkipro/mykorobkipro/web/core/lib/Drupal/Core/Security/DoTrustedCallbackTrait.php(100): call_user_func_array(Array, Array)
#25 /var/www/korobkipro/mykorobkipro/web/core/lib/Drupal/Core/Render/Renderer.php(781): Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_ren...', 'silenced_deprec...', 'Drupal\\Core\\Ren...')
#26 /var/www/korobkipro/mykorobkipro/web/core/lib/Drupal/Core/Render/Renderer.php(372): Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array)
#27 /var/www/korobkipro/mykorobkipro/web/core/lib/Drupal/Core/Render/Renderer.php(200): Drupal\Core\Render\Renderer->doRender(Array, false)
#28 /var/www/korobkipro/mykorobkipro/web/core/lib/Drupal/Core/Render/MainContent/HtmlRenderer.php(226): Drupal\Core\Render\Renderer->render(Array, false)
#29 /var/www/korobkipro/mykorobkipro/web/core/lib/Drupal/Core/Render/Renderer.php(573): Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}()
#30 /var/www/korobkipro/mykorobkipro/web/core/lib/Drupal/Core/Render/MainContent/HtmlRenderer.php(227): Drupal\Core\Render\Renderer->executeInRenderContext(Object(Drupal\Core\Render\RenderContext), Object(Closure))
#31 /var/www/korobkipro/mykorobkipro/web/core/lib/Drupal/Core/Render/MainContent/HtmlRenderer.php(117): Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object(Symfony\Component\HttpFoundation\Request), Object(Drupal\Core\Routing\CurrentRouteMatch))
#32 /var/www/korobkipro/mykorobkipro/web/core/lib/Drupal/Core/EventSubscriber/MainContentViewSubscriber.php(90): Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object(Symfony\Component\HttpFoundation\Request), Object(Drupal\Core\Routing\CurrentRouteMatch))
#33 [internal function]: Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object(Symfony\Component\HttpKernel\Event\GetResponseForControllerResultEvent), 'kernel.view', Object(Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher))
#34 /var/www/korobkipro/mykorobkipro/web/core/lib/Drupal/Component/EventDispatcher/ContainerAwareEventDispatcher.php(111): call_user_func(Array, Object(Symfony\Component\HttpKernel\Event\GetResponseForControllerResultEvent), 'kernel.view', Object(Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher))
#35 /var/www/korobkipro/mykorobkipro/vendor/symfony/http-kernel/HttpKernel.php(156): Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch('kernel.view', Object(Symfony\Component\HttpKernel\Event\GetResponseForControllerResultEvent))
#36 /var/www/korobkipro/mykorobkipro/vendor/symfony/http-kernel/HttpKernel.php(68): Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object(Symfony\Component\HttpFoundation\Request), 1)
#37 /var/www/korobkipro/mykorobkipro/web/core/lib/Drupal/Core/StackMiddleware/Session.php(57): Symfony\Component\HttpKernel\HttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#38 /var/www/korobkipro/mykorobkipro/web/core/lib/Drupal/Core/StackMiddleware/KernelPreHandle.php(47): Drupal\Core\StackMiddleware\Session->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#39 /var/www/korobkipro/mykorobkipro/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(106): Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#40 /var/www/korobkipro/mykorobkipro/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(85): Drupal\page_cache\StackMiddleware\PageCache->pass(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#41 /var/www/korobkipro/mykorobkipro/web/core/lib/Drupal/Core/StackMiddleware/ReverseProxyMiddleware.php(47): Drupal\page_cache\StackMiddleware\PageCache->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#42 /var/www/korobkipro/mykorobkipro/web/core/lib/Drupal/Core/StackMiddleware/NegotiationMiddleware.php(52): Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#43 /var/www/korobkipro/mykorobkipro/vendor/stack/builder/src/Stack/StackedHttpKernel.php(23): Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#44 /var/www/korobkipro/mykorobkipro/web/core/lib/Drupal/Core/DrupalKernel.php(708): Stack\StackedHttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#45 /var/www/korobkipro/mykorobkipro/web/index.php(19): Drupal\Core\DrupalKernel->handle(Object(Symfony\Component\HttpFoundation\Request))
#46 {main}

если восстановить старую папку то все работает как прежде. но как я понимаю композер его обновлять не будет.
анализ БД показал что старый путь к модулю хранится в таблице `cache_default` и `locales_location`. пробовал сбрасывать разные кэши но ничего не помогает. может надо снять регистрацию какого-н класса?
такая-же ситуация в друпал 9. как установить модуль через композер если он ранее был установлен обычным способом?

сообщение от апача:

[Sat Dec 12 05:52:24.652511 2020] [proxy_fcgi:error] [pid 285105:tid 139684629403392] [client 192.168.1.1:65099] AH01071: Got error 'PHP message: PHP Fatal error:  require()
: Failed opening required '
/var/www/korobkipro/mykorobkipro/web/modules/token/src/Element/TokenTreeTable.php' (include_path='/var/www/korobkipro/mykorobkipro/vendor/pear/arc
hive_tar:/var/www/korobkipro/mykorobkipro/vendor/pear/console_getopt:/var/www/korobkipro/mykorobkipro/vendor/pear/pear-core-minimal/src:/var/www/korobkipro/mykorobkipro/vend
or/pear/pear_exception:.:/usr/share/php') in /var/www/korobkipro/mykorobkipro/vendor/symfony/class-loader/ApcClassLoader.php on line 112', referer: https://korobki.pro/ru/ad
min

Лучший ответ

Аватар пользователя ivnish ivnish 12 декабря 2020 в 15:55

Composer ставит модули в /modules/contrib

Чтобы убрать ошибку ApcClassLoader и сбросить кэш APC, нужно перезапустить апач

Комментарии

Аватар пользователя ivnish ivnish 12 декабря 2020 в 15:55

Composer ставит модули в /modules/contrib

Чтобы убрать ошибку ApcClassLoader и сбросить кэш APC, нужно перезапустить апач

Аватар пользователя jura12 jura12 12 декабря 2020 в 16:17

в моем случае помог рестарт самого php: sudo systemctl restart php7.3-fpm . странное дело. может вообще можно отключить этот кэш? это 20-apcu.ini модуль?
может надо композер запускать с параметрами . или эти настройки не для команды require.

Аватар пользователя ivnish ivnish 12 декабря 2020 в 16:23

Зачем так радикально? Ты ведь не каждый день переводишь сайты на composer и меняешь расположение модулей