【问题标题】:App Engine: Redirect to latest versionApp Engine:重定向到最新版本
【发布时间】:2015-07-19 22:28:45
【问题描述】:

我想将我的测试用户重定向到我的应用引擎应用程序的最新版本。我听说您可以使用 url latest-dot-project-id.appspot.com 访问最新版本,但这只是默认版本。

任何想法如何重定向到最新版本,可能有 url version-dot-project-id.appspot.com

我知道我可以访问 API 以获取最新版本,但我也无法使用服务帐户从那里获取数据。

【问题讨论】:

  • 为什么不将最新版本设置为默认?
  • 正如帖子中所说,它是针对测试用户的。普通用户应该会看到默认版本。
  • 您在“正常”和“测试”之间所做的区分既重要又模棱两可。您所说的“测试”是指“测试人员”(在 QA 意义上),还是指您想要向其公开新版本的普通社区的一个子集?
  • 测试用户是 QA 意义上的内部测试人员。

标签: php google-app-engine google-cloud-platform


【解决方案1】:

应该能够使用通用的 latest 关键字(而不是找出该模块的哪个特定版本是最新的)来访问您需要的任何模块:

latest-dot-<modulename>-dot-<appname>.appspot.com

至少在 python 中它可以工作......

latest-dot-project-id.appspot.com 构造中,您没有指定模块名称,这可能是您只点击 default 模块的原因。

更多详情请关注Routing via URL doc

【讨论】:

    【解决方案2】:

    AFAIK,应用程序无法以编程方式访问可用版本,因此要弄清楚“最新”版本是什么,您需要提供一个保留名称。 test 怎么样?使用version: test 上传要测试的版本,并让您的测试人员点击它。然后,当您想使用经过测试的版本时,请使用“真实”版本再次上传,然后将其设为默认版本。假设您没有进行任何更改,第二次上传应该很快。

    FWIW,许多人在他们的测试版本中使用完全独立的应用程序名称,这样测试人员就不会修改生产数据。

    【讨论】:

    • 有 App Engine API,这将是一个完美的解决方案。但我似乎不知道如何从 OAuth 服务帐户获取 access_token。
    • 我可以证实这一点 - 在单独的模块上使用暂存环境比在版本上更容易,并且通过使用 @987654324 调查当前模块来更改命名空间(数据存储区、内存缓存等) @
    • 哦,也就是说,从python运行时你绝对可以在模块api上使用get_versions获得当前版本:cloud.google.com/appengine/docs/python/modules/functions
    • 当然,但据我所知,您无法访问 latest 版本,其中 latest 表示“我为测试人员上传的新版本。”
    【解决方案3】:

    如果测试用户不是一个需要主动返回反馈的预定义组,并且需要/期望的是一种在一段时间内缓慢推出功能同时监控日志等的方法,您可以利用 App Engine's traffic splitting 功能.这可以在cloud developer console的应用引擎项目页面的版本页面上找到

    流量可以根据 cookie 或 IP 地址进行拆分。其中任何一个都带有一些可以轻松解决的小怪癖。

    您必须选择是按 IP 地址还是 HTTP cookie 拆分流量。设置 IP 地址拆分更容易,但 cookie 拆分更精确。

    更多关于流量拆分here.

    【讨论】:

    • 问题是测试人员也应该可以访问标准版本。
    【解决方案4】:

    最终使用 Google App Engine Admin API 获取最新版本。

                $ch = curl_init();
                curl_setopt($ch, CURLOPT_URL,"https://appengine.googleapis.com/v1beta4/apps/-----/modules/default/versions");
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                $headers = array();
                $headers[] = 'Authorization: Bearer '.json_decode($client->getAccessToken())->access_token;
    
                curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    
                $versions = json_decode(curl_exec ($ch))->versions;
                curl_close ($ch);
    
                $newest_version = "0";
                foreach($versions as $version){
                    if(str_replace("-", "", $version->id) > str_replace("-", "", $newest_version)){
                        $newest_version = $version->id;
                    }
                }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-04
      相关资源
      最近更新 更多