GAE云端点 - 部署后Api不更新

时间:2013-02-24 01:36:35

标签: google-app-engine google-cloud-endpoints

我开始在我的GAE项目中使用云端点,但是在服务器上没有更新api时遇到了问题。

  • localhost:8888 / _ah / api / explorer没问题。

但是当我部署时,没有任何改变。

  • myapp.appspot.com:8888/_ah/api/explorer不好

进一步调查显示网址结束点更新 例如:https://myapp.appspot.com/_ah/api/myapp/v1/foo/list

但加载的客户端api仍然不正确。 例如:gapi.client.load('myapp','v1',callback,url); gapi.client.myapp.foo.list();

如果我将调用从foo / list更改为foo / list2,其余的url会更新,api包不会。

6 个答案:

答案 0 :(得分:22)

我将尝试涵盖人们可能遇到的两个案例:

客户端:

Google APIs Explorer网络应用会积极缓存,因此当您更新API服务器端以查看客户端中的更改时,您需要清除缓存或强制刷新。

服务器端(在已部署的生产应用引擎应用中):

如果您遇到部署问题,调试时有两个地方可以查看:

  • 部署后检查管理日志(https://appengine.google.com/adminlogs?&app_id=s~YOUR-APP-ID)。成功部署应用程序代码后,您应该看到以下消息:

    Completed update of a new default version
    

    之后不久你应该看到:

    Successfully updated API configuration
    

    如果此消息表明API配置更新失败,则应再次部署。如果所述错误持续存在,您应该通知我们一个错误。如果您没有看到有关API配置的任何消息,则应检查路由配置中是否明确命名了路径/_ah/spi/.*(Python为app.yaml,Java为web.xml。< / p>

  • 部署后检查应用程序日志(https://appengine.google.com/logs?&app_id=s~YOUR-APP-ID)。部署完成后,Google的API基础架构会向您的应用程序中的/_ah/spi/BackendService.getApiConfigs发出请求,以便您的API配置(作为JSON)可以在Google的API基础架构中注册,并且可以创建所有与发现相关的配置。如果此请求未以200完成,则您的API更改将不会显示,因为Google的API基础结构将无法注册。

  • 如果您始终获得302/_ah/spi/BackendService.getApiConfigs请求的重定向,那是因为您(或您生成的API配置)指定了使用{{1}的“bns适配器”作为API根目录中的协议,但http:(Java)或web.xml(Python)要求app.yaml的路径是安全的。这将使用/_ah/spi作为协议的请求被重定向(使用http:)到具有302作为协议的同一页面。在进入实验之前,这是受信任的测试人员论坛上的discussed

答案 1 :(得分:2)

这就是发生在我身上的事。

我在localhost上测试了我的端点,它工作正常。

我在appspot上部署了我的端点,当我向它发出请求时,我在浏览器中收到了“未找到”消息。

所以我查看了日志,当我向端点发出请求时,我在favicon文件上看到了404 http错误代码。实际上,我忘记将该文件放入我的部署中。

所以我用favicon文件重新部署了我的战争,404 http代码消失了,端点也在appspot上工作正常!

我意识到这可能听起来很愚蠢,但这正是我所经历的。 (我为我可怜的英语道歉)

答案 2 :(得分:1)

我注意到,如果你第一次上传你的应用,而你的web.xml中没有以下内容:

 <security-constraint>
        <web-resource-collection>
            <url-pattern>/_ah/spi/*</url-pattern>
        </web-resource-collection>
        <user-data-constraint>
            <transport-guarantee>CONFIDENTIAL</transport-guarantee>
        </user-data-constraint>
    </security-constraint>

然后你的bns适配器将被设置为http前进。当我之后添加上面的内容时,我在/_ah/spi/BackendService.getApiConfigs上获得了302个http代码,并且端点永远不会更新。

所以现在我已经恢复了在/ _ah / spi上不使用https而我的端点正在更新。我想那些看到他们的端点没有更新的人会回到他们对ssl on / _ah / spi /的第一个配置。

航向。

答案 3 :(得分:0)

当我使用此URL调用我的API时,我遇到了同样的错误未找到(404错误代码)

https:// MY_APP_ID.appspot.com / _ah / api / MY_SERVICE / v1 / user

我尝试了所有内容,最后通过从 WEB-INF 中删除发现文件并仅保留 MY_SERVICE-v1.api 来修复它重新部署了API。现在工作正常。

答案 4 :(得分:0)

在部署新版本后,我也获得了陈旧的API发现文档,GAE花了几分钟才开始为我提供新服务。

答案 5 :(得分:0)

我遇到了同样的问题,我检查了管理日志,其他日志等...但我的API仍然没有更新到最新版本。

所以我决定在API代码中查看我编写的最后一个方法(我在Java 7中编写)。我发现GAE并不喜欢这样的陈述:

if (!blocked){ .... }

我把它改为:

if (blocked == false) { ... }

它就像一个魅力。因此,从它的外观来看,GAE扫描新的API方法并且不接受一些快捷方式。