我正在尝试以更具成本效益的方式部署我的Rails应用程序,并通过Ruby Starter Projects体验了Google Cloud Platform。
它几乎是完美的,并且在价格上肯定具有竞争力,但是我不知道如何在重新部署后自动删除旧的已部署版本实例。
即:假设我运行的每个实例都有一个版本:
ruby-on-rails - 如何自动删除旧的Google App Engine版本实例?-LMLPHP
然后,我对我的应用程序进行更改,并通过以下方式重新部署:

$ gcloud preview app deploy app.yaml worker.yaml --promote
所以现在我为每个实例部署了两个版本(假设Google会在它们之间智能地切换):
ruby-on-rails - 如何自动删除旧的Google App Engine版本实例?-LMLPHP
但是现在呢?这些实例是否会自行关闭?到目前为止,我发现摆脱它们的最好方法是the tutorial's Deleting the project page:

ruby-on-rails - 如何自动删除旧的Google App Engine版本实例?-LMLPHP
Google App Engine上的每个人都只是手动删除其应用程序的旧部署吗?

最佳答案

要停止所有模块的所有非默认版本的所有实例(与这些模块所使用的语言无关),可以使用control API添加一个用Python编写的小型modules模块:

from google.appengine.api.modules import modules

# core logic (inside a cron or other handler)
for m in modules.get_modules():
    dv = modules.get_default_version(m)
    for v in modules.get_versions(m):
        if v != dv: modules.stop_version(m, v)

这不会删除非默认版本(modules API当前似乎不支持删除),但是会确保它们的所有实例均未运行(因此不会产生任何费用)。

此核心逻辑旨在将其包装在处理程序中,因此您可以根据需要触发它,例如在cron作业中,或在您从外部触发的“常规”处理程序中(使用适当的auth),例如在bash脚本中通过wget或curl进行操作。

我不相信有Python的google.appengine.api.modules.modules的Ruby版本,但是,我可能错了...我只是找不到一个。但是,一个简单的Python编码模块应该可以让您控制以任何其他App Engine语言编码的模块(因为App Engine可以让您混合和匹配以不同语言编码的模块)。

关于ruby-on-rails - 如何自动删除旧的Google App Engine版本实例?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34499875/

10-16 18:05