GAE/P - 为维护安排停机时间

Posted

技术标签:

【中文标题】GAE/P - 为维护安排停机时间【英文标题】:GAE/P - schedule downtime for maintenance 【发布时间】:2012-12-28 02:47:53 【问题描述】:

我正在对我的实体进行一些重构,我想暂时关闭对我的应用引擎应用的所有访问权限(管理员除外),以防止用户在我执行维护时修改任何实体。

有什么简单的方法可以做到这一点?我能想到的唯一简单方法是创建一个新的app.yaml 文件,其中所有页面都需要管理员。这样做的一个缺点是我无法向用户发出友好的信息,即访问权限很快就会恢复。

有更好的方法吗?

【问题讨论】:

【参考方案1】:

使用管理控制台的应用程序设置选项卡“禁用数据存储写入”:https://developers.google.com/appengine/docs/adminconsole/applicationsettings#Disable_Datastore_Writes

这会将您的数据存储设置为只读模式并阻止任何用户进行更改。

编辑:这里有一篇关于如何修改您的应用以在停机期间优雅降级的文章:https://developers.google.com/appengine/docs/python/howto/maintenance

【讨论】:

感谢您的信息。唯一的问题是我希望能够以管理员身份进行数据存储写入,但您的解决方案似乎不允许我这样做。 刚刚尝试过:应用程序的写入被禁用,但您仍然可以在管理数据存储查看器中执行操作。我还没试过bulkloader。 请看我的回答,让我知道你的想法。【参考方案2】:

我通过修改 WSGIApplication 创建了维护模式。

我的main.py 现在看起来像这样:

import webapp2
import views

maintenance_mode = False

# These routes need to be always available
routes = [
    # Static pages
    (r'/(|about|contact|help|faq|terms|privacy|users|methods)', 
     views.Static),
    # Other routes that should always be available here
]

if maintenance_mode:
    routes += [(r'/.*', views.Maintenance)] # Displays a maintenance message
    application = webapp2.WSGIApplication(routes)

else:
    routes += [
        # Routes that are not available in maintenance mode
    ]
    application = webapp2.WSGIApplication(routes)

views.py 有以下内容:

class Maintenance(webapp2.RequestHandler):
    def get(self):
        self.response.write (
            "My app is down for maintenance and should be back up shortly.")
    def post(self):
        self.response.write (
            "My app is down for maintenance and should be back up shortly.")

这似乎是一个简单且安全的解决方案,但如果您发现此方法有任何缺陷,请告诉我。

【讨论】:

以上是关于GAE/P - 为维护安排停机时间的主要内容,如果未能解决你的问题,请参考以下文章

游戏怎么做到服务器不停机维护?

精品k8s的pod迁移与节点停机维护

必须收藏!MySQL如何不停机维护主从同步?看这篇就够了

企业实战|Mysql不停机维护主从同步

在 SSMS 17.6 中创建维护计划后,SSMS 会在尝试安排任务运行时自动重新启动

玩转 IoT 数据,做“大预言家”!