2014-12-05 63 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