应用引擎:重定向到最新版本


App Engine: Redirect to latest version

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

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

我知道我可以访问API以获得最新版本,但我也有麻烦从那里获得数据与服务帐户。

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

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

至少在python中是有效的…

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

通过URL路由的更多细节文档

毫无疑问,应用程序没有程序访问可用版本的权限,所以弄清楚"最新"版本是什么需要你提供一个保留名称。test怎么样?使用version: test上传要测试的版本,并让测试人员点击它。然后,当您想要使用测试版本时,请将其与"真实"版本一起再次上传,然后将其设置为默认值。假设您没有更改任何内容,第二次上传应该会很快完成。

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

如果测试用户不是主动返回反馈的预定义组,并且需要/期望的是在监视日志等的同时在一段时间内缓慢推出功能的方法,那么您可以利用App Engine的流量分割功能。这可以在云开发者控制台

的应用引擎项目页面的版本页面中找到。

流量可以基于cookie或ip地址进行分割。这两者都有一些小怪癖,但可以很容易地解决。

选择按IP地址分片还是按HTTP cookie分片。设置IP地址分割更容易,但cookie分割更精确。

更多关于交通分流的信息在这里

最终使用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;
                }
            }