2010-09-25 58 views
51

正确地配置了一个发展服务器和生产服务器,我想建立一个分期环境在谷歌应用程序引擎,以测试新开发的版本有用在将它们部署到生产之前生活。如何建立一个分级环境在谷歌应用程序引擎

我知道两种不同的方法:

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

version: app-staging 

我不喜欢这种方式的是,生产数据被污染了我的分级测试,因为(纠正我,如果我错了):

  1. 舞台版和量产版共享同一数据存储
  2. 舞台版和量产版共享相同的日志

关于ŧ他首先指出,我不知道是否可以使用新的namespaces python API“固定”。

B.第二个选项是通过这种方法修改app.yaml应用参数

application: foonamestaging 

,我将创建完全独立的生产版本的第二应用。
我看到的唯一缺点是我不得不配置第二个应用程序(管理员设置)。
使用像Gaebar这样的备份\恢复工具,该解决方案也可以正常工作。

您使用什么样的方法为您的Web应用程序设置临时环境?
另外,你有任何自动化的脚本来部署前更改yaml?

+0

注意选项B可能违反谷歌应用引擎TOS。 – bdonlan 2010-09-25 15:15:56

+1

@bdolan你有什么参考吗? – systempuntoout 2010-09-25 17:34:16

+0

http://code.google.com/appengine/terms.html 4.4。您不得开发多个应用程序来模拟或充当单个应用程序,或者以避免产生费用的方式访问服务。 – bdonlan 2010-09-26 01:22:07

回答

12

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

但我现在看到它的方式,选项A是一个更干净的解决方案。您可以用几行代码基于交换机的版本,它可以从环境变量CURRENT_VERSION_ID动态获取的记录这里的数据存储命名空间:http://code.google.com/appengine/docs/python/runtime.html#The_Environment

+0

我也带着问题中的第二个选项,但是我在单独的名称空间可用之前就已经开始了。 – Cuga 2010-09-27 15:34:21

+1

@systempuntoout我认为这是可能的:“批量加载器支持--namespace = NAMESPACE标志,允许您指定要使用的名称空间。每个名称空间分开处理,如果要访问所有名称空间,则需要迭代通过他们。” http://code.google.com/appengine/docs/python/multitenancy/multitenancy.html#Using_Namespaces_with_the_Bulkloader – Franck 2010-09-27 17:24:35

+0

@Franck听起来很有趣,所以选项A似乎是可行和干净的 – systempuntoout 2010-09-28 08:26:51

15

如果需要单独的数据存储,选择B找我清洁的解决方案因为:

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

对于“您可以保留多租户的名称空间功能”。 – systempuntoout 2012-04-23 13:30:49

+2

+1 for 6.例如我保存身份验证,可以将其部署到开发者的个人凭证保存,我必须每次输入真实帐户和密码。 – Campey 2012-10-13 11:55:07

+0

我也使用了选项B.但是,在尝试开始使用push-to-deploy时,我发现很难使用这种方法,因为我需要在每个环境中保留一个app.yaml(在推送部署之前,我只是有一个脚本在部署之前更改了应用程序参数,然后将其设置回去),或者使用不同的分支,每个分支都具有(可能有冲突的)app.yamls – marianosimone 2014-05-12 18:20:46

4

我们使用选项B.

除了Zygmantas大约在应用层面,从督促开发分离的好处的建议,我们也使用我们开发的应用程序来测试性能。

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

当然有时我们需要咬紧牙关,并调整&现场观看。但有另一个应用程序可以玩,这很好。

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

5

我们去的选项B.我认为这是一般的好,因为它完全隔离的项目。因此,例如在舞台服务器上播放一些配置不会影响安全性,也不会影响生产环境中的其他蝴蝶效果。

至于部署脚本,你可以在你的app.yaml中拥有你想要的任何应用程序名称。有些哑/ dev名称和部署时,只需使用一个-A参数:

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

这将简化您的部署脚本颇多,无需字符串替换或任何类似在你的app.yaml