Symfony 2 Различное поведение в среде prod и dev

1

Контекст: меня попросили сегодня добавить новую функцию в довольно старый проект (что-то вроде Symfony 2.0). Он состоял в добавлении нового атрибута к сущности и добавлении соответствующего поля в форму редакции. Воспроизведение детей: я редактировал код и хорошо работает в среде dev (устанавливается непосредственно в app.php)

Проблема. Когда среда, установленная в app.php, является prod, объект не сохраняется при отправке формы и не извлекается при загрузке формы.

Исследования: Что я проверил до сих пор в prod env:

  • Представленная форма верна
  • Контроллеру удается отобразить форму и правильно увлажнить объект
  • Я удалил кеш несколько раз как вручную, так и из командной строки
  • Я проверил SQL-запрос после отправки формы, запрос не обновляет мое новое поле, как ожидалось

Предположение: кажется, что проблема возникает при стирании объекта, это похоже на то, что новое поле полностью игнорировалось.

Предположение: после того, как я выставил свою проблему более опытным разработчикам Symfony, единственным предложением было то, что может существовать кеш PHP (а не symfony), где-то паразитирующий мой prod env. Это предположение тестируется (я не мог перезапустить apache сам), и я смогу проверить его, возможно, завтра в лучшем сценарии.

Тем не менее, я чувствую, что предположение кэша PHP имеет 10% шанс быть хорошим. Я не могу поделиться с вами всем кодом проекта, но я спрашиваю вас, можете ли вы опубликовать каждую идею, которую вы могли бы иметь по этой проблеме.

UPDATE: я перезапустил Apache2. Проблема по-прежнему сохраняется. Похоже, что Doctrine строит свой кеш в прежней версии проекта (он не видит никаких изменений в комментариях, например), хотя app/cache/пуст. Есть идеи?

  • 0
    Это может показаться глупостью, но вы не назвали это конкретно в своих пулях, поэтому я спрошу. Новое отображение было применено к базе данных? Вы получаете какие-либо различия из doctrine:schema:update ?
  • 1
    Если есть две базы данных, одна для dev и одна для среды prod : обновили ли вы обе соответственно после добавления нового свойства в сущность?
Показать ещё 5 комментариев
Теги:
caching

2 ответа

2
Лучший ответ

Полный ответ заключался в том, чтобы выполнить:

app/console doctrine:cache:clear-metadata --env=prod

Кэширование было вызвано конфигурацией memcache, которая присутствует только в рабочей среде.

2

Я удалил кеш несколько раз как вручную, так и из командной строки

Вы можете уточнить? Кэш 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
  • 0
    Чтобы быть более точным, я запустил 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-* ). Пока ничего не получалось.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню