2015-01-15 3 views
0

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

(обратите внимание, что мое приложение использует the new Symfony 3 directory structure. Заменить bin/console с app/console и var/cache с app/cache, если вы используете текущую структуру каталогов)

Я недавно переименовал один из моих классов обслуживания (VariantSlugListener). При развертывании приложения на промежуточном сервере, я получил следующее сообщение об ошибке при запуске bin/console assetic:dump --env=prod:

PHP Fatal error: Class 'MyBundle\Listener\VariantSlugListener' not found in /var/www/example.com/staging/var/cache/prod/appProdProjectContainer.php on line 494

линии 494 из appProdProjectContainer.php содержит следующий код:

return $this->services['3f288d4f09c9906944ba7e17358f669b942397baf9d79d5ff0737bb756df7023_1'] = new \MyBundle\Listener\VariantSlugListener(); 

Это не удивительно, что \MyBundle\Listener\VariantSlugListener не может быть найден, поскольку он был переименован в \MyBundle\EventListener\VariantSlugSubscriber с последним обновлением. Решение было бы просто очистить кэш Symfony.

Однако, пытаясь очистить кеш (используя bin/console cache:clear --env=prod), я получаю ту же ошибку, что и в команде assetic:dump. Поэтому я получаю сообщение об ошибке, потому что мой кэш Symfony устарел, но я не могу очистить кеш из-за ошибки.

Возможно, обойти это можно, вручную удалив содержимое каталога var/cache, но это не похоже на лучшее решение.

Я что-то не хватает?

+1

среда prod не предназначена для изменения имен файлов php, поэтому sduo rm -rf var/cache * –

+0

Эй, Джон, я забыл упомянуть. Я сделал изменения на своей локальной машине разработки, а затем развернул их на сервере с помощью git. Кэш Symfony не способен справиться с этим? –

+0

Возможно, вы забыли добавить var/cache в .gitignore? лично я бы предпочел, чтобы ваш сценарий развертывания удалял содержимое var/cache после развертывания. –

ответ

1

Возможно, вы запускаете некоторые события, которые обрабатываются в вашем VariantSlugListener, когда вы делаете «cache: clear». Таким образом, ваш единственный выбор - просто удалить содержимое каталога кеша или заменить значение вручную, а затем запустить cache:clear, чтобы разогреть кеш.

+0

Класс 'VariantSlugListener' был слушателем событий Doctrine, который запускался на событии' prePersist'. Поэтому его нельзя вызывать во время команды 'cache: clear' ...? –

+0

@Nic Вам придется отлаживать его с помощью xdebug. Просто перейдите в строку, где контейнер пытается создать экземпляр нового VariantSlugListener и установить точку останова. Запустите сценарий и трассировку стека, вы сможете понять, кто его называет ... – nikita2206

Смежные вопросы