Symfony 2 prod和dev环境之间的不同行为

时间:2015-05-27 22:34:15

标签: php symfony caching

上下文:我今天被要求在一个相当古老的项目上添加新功能(类似于Symfony 2.0)。它包括向实体添加新属性并将相应的字段添加到版本表单。儿童游戏:我编辑了代码,它在开发环境中很好用(直接在app.php中设置)

问题:当app.php中设置的环境为prod时,表单提交时不会保留实体,也不会在加载表单时检索实体。

调查:到目前为止我在prod env中检查过的内容:

  • 提交的表单是正确的
  • 控制器设法映射表单并正确地水合实体
  • 我已手动和命令行多次删除缓存
  • 我在提交表单后检查了SQL查询,查询没有按预期更新我的新字段

假设:当实体被刷新时,问题似乎是适用的,就像新字段被完全忽略一样。

假设:在向更有经验的symfony开发人员公开我的问题之后,唯一的建议是可能有一个PHP缓存(而不是symfony)寄存在我的prod env中。这个假设正在测试中(我自己无法重启apache),我可以在最好的情况下明天测试它。

尽管如此,我觉得PHP缓存假设有10%的机会成为好的。我无法与您分享整个项目代码,但我问您是否可以发布关于此问题的每个想法。

更新:我重启了Apache2。问题仍然存在。似乎Doctrine在项目的早期版本上构建了它的缓存(例如,它没有看到注释中的任何更改),即使app / cache /为空。有什么想法吗?

2 个答案:

答案 0 :(得分: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配置yml,看看你是否找到类似的东西:

metadata_cache_driver : something
result_cache_driver : something
query_cache_driver : something

答案 1 :(得分:2)

完整答案是执行:

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

缓存是由仅存在于生产环境中的memcache配置引起的。