2015-05-27 29 views
1

語境:我今天被要求必須添加一個很舊的項目中的新功能(像Symfony的2.0)。它包括向一個實體添加一個新的屬性,並將相應的字段添加到版本表單中。兒童遊戲:我編輯的代碼,而且運作良好的開發環境(直接在app.php設置)Symfony的2種不同的行爲

問題:當app.php設置環境prod,實體不保留當窗體已提交,也未在表單加載時檢索。

調查:我遠在prod ENV已經檢查了這樣:

  • 提交的形式是正確的
  • 控制器管理映射的形式和正確滋潤實體
  • 我有手動和命令行
  • 我已經檢查了SQL查詢的表格提交後,查詢不更新我的新領域刪除緩存多次預期

猜想:這個問題似乎當實體刷新到apppear,它就像新的領域被完全忽略。

假設:具有暴露我的問題,更有經驗的symfony開發後,唯一的建議是,有可能是一個PHP緩存(未symfony的一個)寄生的地方我prod ENV。這個假設被測試(我不能重新啓動Apache自己)和我將能夠測試它也許明天在最好的情況。

不過,我覺得PHP緩存假設有10%的機會是好的。我無法與您分享整個項目代碼,但我在問你是否可以發佈關於此問題的所有想法。

UPDATE:我重新啓動了Apache2。問題仍然存在。看起來Doctrine在舊版本的項目上構建了它的緩存(例如,它看不到任何註釋中的變化),即使app/cache /爲空。任何想法 ?

+0

這可能看起來像一個愚蠢的點,但你沒有專門在你的子彈中提出它,所以我會問。新映射是否已應用於數據庫?你從'doctrine:schema:update'得到任何差異嗎? –

+1

如果有兩個數據庫,一個用於'dev',另一個用於'prod'環境:在將新屬性添加到實體後,是否相應地更新了兩個數據庫? – insertusernamehere

+0

@PeterBailey @insertusernamehere是的,兩個環境都使用相同的數據庫。當我在'prod' env中更新另一個不同於新的字段時,它正確更新(我用SQL查詢直接在數據庫中檢查它)。 'doctrine:schema:update'告訴我我的db已經與當前實體元數據同步。 – Harijoe

回答

2

完整的答案是執行:

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重新啓動就可以了。

如果這個工作,你應該檢查你的電棒配置陽明,看看你是否發現這樣的:

metadata_cache_driver : something 
result_cache_driver : something 
query_cache_driver : something 
+0

更確切地說,我運行'app/console cache:clear --env = prod'和'rm -rf cache/*'。看起來Doctrine被配置爲在config_prod.yml中使用memcache。我已經[http://php.net/manual/fr/memcache.flush.php](這個鏈接)刷新了memcache。我也嘗試了你的建議('doctrine:cache:clear- *')。目前爲止沒有任何工作 – Harijoe