Контекст: меня попросили сегодня добавить новую функцию в довольно старый проект (что-то вроде Symfony 2.0). Он состоял в добавлении нового атрибута к сущности и добавлении соответствующего поля в форму редакции. Воспроизведение детей: я редактировал код и хорошо работает в среде dev (устанавливается непосредственно в app.php)
Проблема. Когда среда, установленная в app.php, является prod
, объект не сохраняется при отправке формы и не извлекается при загрузке формы.
Исследования: Что я проверил до сих пор в prod
env:
Предположение: кажется, что проблема возникает при стирании объекта, это похоже на то, что новое поле полностью игнорировалось.
Предположение: после того, как я выставил свою проблему более опытным разработчикам Symfony, единственным предложением было то, что может существовать кеш PHP (а не symfony), где-то паразитирующий мой prod
env. Это предположение тестируется (я не мог перезапустить apache сам), и я смогу проверить его, возможно, завтра в лучшем сценарии.
Тем не менее, я чувствую, что предположение кэша PHP имеет 10% шанс быть хорошим. Я не могу поделиться с вами всем кодом проекта, но я спрашиваю вас, можете ли вы опубликовать каждую идею, которую вы могли бы иметь по этой проблеме.
UPDATE: я перезапустил Apache2. Проблема по-прежнему сохраняется. Похоже, что Doctrine строит свой кеш в прежней версии проекта (он не видит никаких изменений в комментариях, например), хотя app/cache/пуст. Есть идеи?
Полный ответ заключался в том, чтобы выполнить:
app/console doctrine:cache:clear-metadata --env=prod
Кэширование было вызвано конфигурацией memcache, которая присутствует только в рабочей среде.
Я удалил кеш несколько раз как вручную, так и из командной строки
Вы можете уточнить? Кэш Symfony - это не то же самое, что и доктрина. В зависимости от вашей доктрины конфигурации можно использовать что-то вроде apc, reddis или что-то еще, чтобы кэшировать свои собственные запросы и данные результата. Если вы еще этого не сделали, попробуйте выполнить следующие команды:
app/console doctrine:cache:clear-metadata
app/console doctrine:cache:clear-query
app/console doctrine:cache:clear-result
Если вам все еще не повезло, я более чем на 10% уверен, что перезапуск Apache сделает трюк.
Если это сработало, вы должны проверить свой prods config yml и посмотреть, найдете ли вы что-то вроде:
metadata_cache_driver : something
result_cache_driver : something
query_cache_driver : something
app/console cache:clear --env=prod
и rm -rf cache/*
. Кажется, Doctrine настроен на использование memcache в config_prod.yml. Я сбросил memcache после [ php.net/manual/fr/memcache.flush.php](this link). Я также попробовал ваше предложение ( doctrine:cache:clear-*
). Пока ничего не получалось.
doctrine:schema:update
?dev
и одна для средыprod
: обновили ли вы обе соответственно после добавления нового свойства в сущность?