2012-11-14 69 views
4

我目前正在開發一個Google App Engine(Python)項目,該項目主要使用Google Cloud SQL(使用SQL Alchemy)進行後端數據存儲。使用Google App Engine發揮SQL Alchemy

大多數情況下,一切正常。然而,偶爾「某些事情」會變得不合時宜,我們開始變得奇怪的例外。例如:

  • AttributeError的: 'COLUMNPROPERTY' 對象有沒有屬性 '戰略'

  • AttributeError的: 'RelationshipProperty' 對象有沒有屬性 '戰略'

我們認爲這可能與啓動新的GAE實例有關,但我們無法確定。

說了這麼多,我的問題是這樣的。我和我的團隊可以用什麼策略來追蹤這個問題?

請記住,該應用程序正在Google App Engine上運行,因此可能會限制我們的選項。

更新: Owen Nelson的下面的評論是正確的。 Google建議您添加threading.RLock。但是我們仍然看到這個問題,但更少。

我想說清楚,到目前爲止,我們無法在本地環境中重現此問題。我們非常肯定這與動態實例的啓動有關,而這並非我們在開發過程中真正做到的。

+0

如果有幫助,我們的應用程序建立在webapp2框架之上。 – Tombatron

+2

我們一直在研究這個問題一段時間,我們已經縮小到實例初始化的問題。在關鍵應用程序初始化步驟中,根據google [遷移到python 2.7運行時指南](https://developers.google.com/appengine/docs/python/python25/migrate27#threadsafe)中的建議添加'threading.RLock()s' (比如按照嚴格的順序導入sqlalchemy聲明模型)似乎有助於*大部分時間*,但當新的實例啓動時,我們仍然會時常看到這些錯誤。真的很令人生氣。 –

回答

1

從我所瞭解的情況來看,您的應用程序只有在生產模式下才會出現問題。

嘗試重現bug的開發模式

最佳的解決方案將能夠重現這個bug在開發模式。要做到這一點,你可以試着用LOTS數據來運行一批單元測試。 (見how to do local test on appengine)。

如果還是不行...

打開將Appstats以獲取有關處理程序的更多信息

您可以打開將Appstats,試圖讓信息在其處理目前造成問題。 Appstats通常給你的信息在數據存儲,這不是我們的情況有關,但你可以從請求一般(如響應時間)

確定的處理程序,並在一個美麗的嘗試捕捉它包獲取信息

一旦你確定問題,或者從那裏升起了源,你可以用一條try..catch圍繞着它。隨着你可以獲取當前執行的跟蹤的詳細信息,並希望解決您的問題