【问题标题】:Symfony 2 Different behaviors between prod and dev environmentsSymfony 2 prod 和 dev 环境之间的不同行为
【发布时间】:2015-08-10 05:37:58
【问题描述】:

上下文:我今天被要求在一个相当老的项目(比如 Symfony 2.0)上添加一个新功能。它包括向实体添加新属性并将相应的字段添加到版本表单。童玩:我已经编辑了代码,它在开发环境中运行良好(直接在app.php中设置)

问题:当app.php中设置的环境为prod时,表单提交时实体没有被持久化,表单加载时也没有被取回。

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

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

假设:问题似乎出现在实体刷新时,就像新字段被完全忽略了一样。

假设: 在将我的问题暴露给更有经验的 symfony 开发人员之后,唯一的建议是可能有一个 PHP 缓存(不是 symfony 缓存)寄生在我的prodenv 中。这个假设正在测试中(我自己无法重新启动 apache),也许明天我可以在最好的情况下测试它。

不过,我觉得 PHP 缓存假设有 10% 的机会是好的。我无法与您分享整个项目代码,但我想问您是否可以发布您对这个问题的所有想法。

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

【问题讨论】:

  • 这似乎是一个愚蠢的观点,但你没有在你的子弹中特别指出,所以我会问。新映射是否已应用于数据库?您是否从 doctrine:schema:update 得到任何差异?
  • 如果有两个数据库,一个用于dev,一个用于prod 环境:在将新属性添加到实体后,您是否相应地更新了这两个数据库?
  • @PeterBailey @insertusernamehere 是的,两个环境都使用同一个数据库。当我在prod env 中更新与新字段不同的另一个字段时,它已正确更新(我直接在数据库中使用 SQL 查询对其进行了检查)。 doctrine:schema:update 告诉我我的数据库已经与当前实体元数据同步。
  • 澄清一下,只有当symfony环境是prod时才有这个问题?
  • @PeterBailey 是的,完全正确

标签: php symfony caching


【解决方案1】:

完整的答案是执行:

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
    

    【讨论】:

    • 更准确地说,我运行了app/console cache:clear --env=prodrm -rf cache/*。似乎 Doctrine 被配置为在 config_prod.yml 中使用 memcache。我在 [php.net/manual/fr/memcache.flush.php](this 链接之后刷新了内存缓存。我也试过你的建议(doctrine:cache:clear-*)。到目前为止没有任何效果。
    猜你喜欢
    • 2019-07-31
    • 2013-12-06
    • 2022-01-16
    • 2013-11-02
    • 2021-05-29
    • 1970-01-01
    • 1970-01-01
    • 2017-12-14
    • 1970-01-01
    相关资源
    最近更新 更多