【问题标题】:Symfony APC caches wrong contentSymfony APC 缓存错误的内容
【发布时间】:2014-02-14 14:12:12
【问题描述】:

喂,

所以我继承了一个使用 APC 作为缓存机制的 symfony 1.3.8 应用程序。尽管如此,我还是通过使用禁用了缓存

default:
  enabled:     false
  with_layout: false
  lifetime:    86400

带有密钥*.symfony.routing.data 的条目仍被保存。

每次我打开指向我使用插件生成的 PDF 文档 $host/$app/erhebung/13398/ausweise.pdf 的链接时,我第二次打开该链接时都会收到错误:

Action "erhebung/13398" does not exist., referer: …

缓存确实 - 在第一次调用之后 - 包含

的序列化值
array(2) {
  'parse_/erhebung/13398/ausweise.pdf_b0d96fa30dcf0130d6a4b26f14f44bfb' =>
  array(3) {
    'name' =>
    string(7) "default"
    'pattern' =>
    string(18) "/:module/:action/*"
    'parameters' =>
    array(3) {
      'module' =>
      string(8) "erhebung"
      'action' =>
      string(5) "13398"
      'ausweise.pdf' =>
      bool(true)
    }
  }
  'generate__4d783133e9aa851733d16cf1d1750ad5_b0d96fa30dcf0130d6a4b26f14f44bfb' =>
  string(1) "/"
}

这似乎是错误的路由模式,应该是:

erhebung_ausweise:
  url:   /erhebung/:id/ausweise.pdf
  param: { module: erhebung, action: ausweise }
  requirements: { id: \d+ }

代替:

default:
  url:   /:module/:action/*

当我手动清除 APC 缓存时,我可以再次生成并打开 PDF。

【问题讨论】:

    标签: caching symfony1 apc


    【解决方案1】:

    好吧,我花了好几天的时间才解决这个问题,我使用了xhprof,因为其他工具如xdebugprint_debug_backtrace 不起作用。

    我将描述导致该问题的原因。

    相同的 url 被路由了两次。首先是运行正确的请求处理程序,其次是错误的。我的前任使用了一个自制的cross_app_url-函数,它可以读取另一个应用程序的路由配置。在此过程中,uri 被再次解析,结果(使用默认路由没有找到)被缓存(再次)。因此,第二次调用 uri 时,第一次路由到请求处理程序失败,因此出现错误。

    我希望如果有人遇到同样的问题,他会发现这比我更容易。

    【讨论】:

      猜你喜欢
      • 2015-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-27
      • 1970-01-01
      • 1970-01-01
      • 2018-04-30
      • 2011-04-03
      相关资源
      最近更新 更多