Symfony APC缓存错误的内容

时间:2014-02-14 14:12:12

标签: caching symfony1 apc

Hy,

所以我继承了一个使用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。

1 个答案:

答案 0 :(得分:0)

Okey,我花了几天时间来解决这个问题,我使用了xhprof,因为xdebugprint_debug_backtrace等其他工具无效。

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

同一个网址被路由两次。首先运行正确的请求处理程序,然后错误地运行。我的前任使用本地cross_app_url - 函数来读取另一个应用程序的路由配置。在此过程中,uri再次被解析,结果(使用默认路由找不到任何内容)被缓存(再次)。因此,第二次将uri称为第一次路由到请求处理程序faild,从而导致错误。

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