Symfony 2 生产环境和开发环境之间的不同行为
Symfony 2 Different behaviors between prod and dev environments
上下文: 今天有人要求我在一个相当古老的项目(类似于 Symfony 2.0)上添加一个新功能。它包括向实体添加新属性并将相应的字段添加到编辑表单。儿童游戏:我已经编辑了代码并且它在开发环境中运行良好(直接在app.php中设置)
问题:当app.php中设置的环境为prod
时,提交表单时不持久化实体,表单提交时不检索实体已加载。
调查: 目前我在 prod
环境中检查的内容:
- 提交的表格是正确的
- 控制器设法映射表单并正确地水合实体
- 我已经多次手动和从命令行删除缓存
- 我在提交表单后检查了 SQL 查询,查询没有按预期更新我的新字段
假设:问题似乎出现在刷新实体时,就像新字段被完全忽略了一样。
假设: 在将我的问题暴露给更有经验的 symfony 开发人员之后,唯一的建议是某处可能有一个 PHP 缓存(不是 symfony 缓存)寄生在我的 prod
env 中。这个假设正在测试中(我无法自己重新启动 apache),也许明天我就能在最好的情况下测试它。
不过,我觉得 PHP 缓存假设有 10% 的可能性是好的。我无法与您分享整个项目代码,但我想问您是否可以 post 您对这个问题的所有想法。
更新: 我已经重启了 Apache2。问题仍然存在。似乎 Doctrine 在项目的前一个版本上构建了它的缓存(例如,它没有看到注释中的任何更改),即使 app/cache/ 是空的。有什么想法吗?
I have deleted the cache multiple times both manually and from command
line
你能澄清一下吗? Symfony 的缓存与 doctrine 的缓存不同。根据您的配置原则,可以使用 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
完整答案是执行:
app/console doctrine:cache:clear-metadata --env=prod
缓存是由仅存在于生产环境中的内存缓存配置引起的。
上下文: 今天有人要求我在一个相当古老的项目(类似于 Symfony 2.0)上添加一个新功能。它包括向实体添加新属性并将相应的字段添加到编辑表单。儿童游戏:我已经编辑了代码并且它在开发环境中运行良好(直接在app.php中设置)
问题:当app.php中设置的环境为prod
时,提交表单时不持久化实体,表单提交时不检索实体已加载。
调查: 目前我在 prod
环境中检查的内容:
- 提交的表格是正确的
- 控制器设法映射表单并正确地水合实体
- 我已经多次手动和从命令行删除缓存
- 我在提交表单后检查了 SQL 查询,查询没有按预期更新我的新字段
假设:问题似乎出现在刷新实体时,就像新字段被完全忽略了一样。
假设: 在将我的问题暴露给更有经验的 symfony 开发人员之后,唯一的建议是某处可能有一个 PHP 缓存(不是 symfony 缓存)寄生在我的 prod
env 中。这个假设正在测试中(我无法自己重新启动 apache),也许明天我就能在最好的情况下测试它。
不过,我觉得 PHP 缓存假设有 10% 的可能性是好的。我无法与您分享整个项目代码,但我想问您是否可以 post 您对这个问题的所有想法。
更新: 我已经重启了 Apache2。问题仍然存在。似乎 Doctrine 在项目的前一个版本上构建了它的缓存(例如,它没有看到注释中的任何更改),即使 app/cache/ 是空的。有什么想法吗?
I have deleted the cache multiple times both manually and from command line
你能澄清一下吗? Symfony 的缓存与 doctrine 的缓存不同。根据您的配置原则,可以使用 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
完整答案是执行:
app/console doctrine:cache:clear-metadata --env=prod
缓存是由仅存在于生产环境中的内存缓存配置引起的。