2014-02-14 75 views
0

Hy,Symfony APC緩存錯誤內容

所以我繼承了一個使用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: … 

緩存那樣 - 第一個電話後 - containt的

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。

回答

0

Okey,我花了幾天的時間來解決這個問題,我用xhprof作爲其他工具,如xdebugprint_debug_backtrace將無法​​正常工作。

我將描述導致該問題的原因。

相同的網址被路由了兩次。首先運行正確的請求處理程序,然後錯誤地運行。我的前任使用本地出品的cross_app_url-功能,可讀取其他應用的路由配置。在這個過程中,uri被再次解析,結果(沒有發現使用默認路由)被緩存(再次)。因此,第二次uri被稱爲第一次路由到請求處理程序faild,因此錯誤。

我希望如果有人遇到同樣的問題,他會發現這比我容易。