如何在Google App Engine上设置登台环境

时间:2010-09-25 12:48:10

标签: python google-app-engine deployment staging

正确配置开发服务器和生产服务器之后,我想在Google App Engine上设置 Staging 环境在将新开发版本部署到生产环境之前对其进行测试。

我知道两种不同的方法:

A。第一个选项是修改app.yaml 版本参数。

version: app-staging

我不喜欢这种方法是生产数据受到我的分期测试的污染,因为(如果我错了,请纠正我):

  1. 暂存版和生产版共享相同的数据存储
  2. 暂存版和生产版共享相同的日志
  3. 关于第一点,我不知道是否可以使用新的namespaces python API“修复”。

    B。第二个选项是修改app.yaml 应用参数

    application: foonamestaging
    

    通过这种方法,我将创建一个完全独立于生产版本的第二个应用程序 我看到的唯一缺点是我被迫配置第二个应用程序(管理员设置) 使用像Gaebar这样的备份\还原工具,此解决方案也可以正常运行。

    您使用何种方法为Web应用程序设置登台环境? 另外,在部署之前,您是否有任何自动脚本来更改yaml?

7 个答案:

答案 0 :(得分:17)

如果需要单独的数据存储区,选项B对我来说看起来更清晰,因为:

  1. 您可以保留版本功能,以便对生产应用程序进行实际版本控制。
  2. 您可以保留版本功能以进行流量分割。
  3. 您可以为多租户保留名称空间功能。
  4. 您可以轻松地将实体从一个应用复制到另一个应用。命名空间之间并不那么容易。
  5. 很少有API仍然不支持命名空间。
  6. 对于拥有多个开发人员的团队,您可以为单个人授予上传到生产权限。

答案 1 :(得分:13)

我在设置中选择了第二个选项,因为它是最快的解决方案,而且我没有在部署时更改应用程序参数的任何脚本。

但是我现在看到它的方式,选项A是一个更清洁的解决方案。您可以使用几个代码行根据版本切换数据存储名称空间,您可以从环境变量CURRENT_VERSION_ID动态获取该文档,如下所示:http://code.google.com/appengine/docs/python/runtime.html#The_Environment

答案 2 :(得分:5)

我们选择了B.我认为它总体上更好,因为它完全隔离了项目。因此,例如,使用登台服务器上的某些配置不会影响并且不会危及安全性或导致生产环境中的任何其他蝴蝶效应。

对于部署脚本,您可以在app.yaml中拥有所需的任何应用程序名称。一些虚拟/开发名称,在部署时,只需使用-A参数:

appcfg.py -A your-app-name update .

这将大大简化您的部署脚本,无需在您的app.yaml

中进行字符串替换或任何类似操作

答案 3 :(得分:4)

我们使用选项B.

除了Zygmantas关于在应用程序级别将dev与prod分离的好处的建议之外,我们还使用我们的开发应用程序来测试性能。

通常情况下,dev实例在资源方面运行时没有太多可用,这有助于查看应用程序“感觉”缓慢的位置。然后,我们还可以独立调整性能设置,以查看有何不同之处(例如前端实例类)。

当然有时候我们需要咬紧牙关,调整一下。现场观看。但是让其他应用程序玩起来真好。

仍然使用命名空间和版本,只是dev是脏的和实验性的。

答案 4 :(得分:1)

无需创建单独的项目。您可以使用dispatch.yaml将登台URL路由到同一项目中的另一个服务(登台)。

  1. 创建一个自定义域staging.yourdomain.com
  2. 创建一个单独的app-staging.yaml,用于指定登台服务。

    ... 服务:分期 ...

  3. 创建distpatch.yaml,其中包含类似内容

    ...

    • url:“ * staging.mydomain.com /” 服务:分期

    • url:“ * mydomain.com /” 服务:默认 ...

  4. 全球应用程序部署app-staging.yaml dispatch.yaml

答案 5 :(得分:0)

我更喜欢选项A而我正在尝试设置simple build script来自动处理

答案 6 :(得分:0)

以下是 Google 文档的说明:

<块引用>

一般建议是每个应用程序有一个项目 环境。例如,如果您有两个应用程序,“app1”和 “app2”,每个都有一个开发和生产环境,你会 有四个项目:app1-dev、app1-prod、app2-dev、app2-prod。这 将环境彼此隔离,因此更改 开发项目不会意外影响生产,并给予 你更好的访问控制,因为你可以(例如)授予所有 开发者访问开发项目但限制生产 访问您的 CI/CD 管道

考虑到这一点,在根目录添加一个 dispatch.yaml 文件,并在代表单个服务并包含该服务的每个目录或存储库中,添加一个 app.yaml 文件以及关联的源代码,如下所述:Structuring web services in App Engine

编辑,如果您使用的是 python,请查看 python 部分中的等效链接。