2014-12-05 70 views
0

我的應用程序有一個數據存儲條目,當應用程序第一次部署時需要用一些默認值進行初始化。我有一個頁面可以讓應用程序的管理員稍後編輯這些值,所以如果初始化代碼再次運行並覆蓋這些編輯就會出現問題。啓動代碼最安全的地方

我最初嘗試將代碼放入appengine_config.py,但這顯然是不正確的,因爲實體的任何新值在幾次頁面加載後都被覆蓋。我想在run_wsgi_app()的調用之前把它放在main.py之前,但是據我的理解,只要App Engine創建應用程序的新實例,就會運行main.pyWarmup requests似乎與appengine_config.py有同樣的問題。

有沒有辦法做我想做的事情?

+2

你在appengine_config.py中的代碼應該檢查值的存在,並且只有當沒有值存在時它應該定義一個默認值。無論採取什麼策略,您都會遇到這個問題。確保曾經處理Intialiases默認值的過程至多運行一次。我實際上只會調用一次特定的處理程序方法。然後在採取任何行動之前檢查它是否應該運行;如果它再次被調用。 – 2014-12-07 04:57:42

+0

謝謝,這絕對是解決我的問題。如果這是張貼的答案,我會接受它。 – 2014-12-07 23:39:47

回答

1

通常,您可以使用appengine_config.py或顯式處理程序。

如果你使用appengine_config.py你的代碼應該檢查值的存在,並且只有當沒有值存在時它應該定義一個默認值。

我主要關注appengine_config.py中只有一個初始化代碼,這些初始值的存在檢查將在每個實例啓動時執行。如果有很多事情要檢查,這可能是您不想要的熱啓動的開銷。

對於一個新實例的Iany初始化代碼,無論採用什麼策略,都會出現這種檢查存在的問題,即「確保什麼是過程初始化默認值最多運行一次」。

就我個人而言,我實際上只會調用一次特定的處理程序方法。然後在採取任何行動之前檢查它是否應該運行;如果它再次被調用

+0

當你說「顯式處理程序」時,你指的是預熱請求嗎?或者是其他東西? – 2014-12-11 19:23:33

+1

我指的是一個單獨的處理程序,沒有任何一個熱請求總是檢查是否已創建默認實體。我通常會創建一個顯式處理程序,即/ setup(需要admin),並檢查它是否已經運行。我經常不創建處理程序,而是定義代碼,然後使用remote_api來調用設置。但是,這取決於目標受衆是誰的應用程序,它的設置。 – 2014-12-12 10:41:14

+0

啊,我明白你的意思了。謝謝。 – 2014-12-12 10:42:30