【问题标题】:GAE cloud endpoints - Api not updating after deployGAE 云端点 - 部署后 Api 未更新
【发布时间】:2013-02-24 01:36:34
【问题描述】:

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

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

但是当我部署时,什么都没有改变。

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

进一步调查显示 url 端点更新 例如: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 包不会。

【问题讨论】:

  • 您是否重新生成了发现文档?
  • 是的。医生看起来是正确的。最终,我的 api 名称更改出现了。耗时约 1.5 小时。
  • Endpoints 至少对我来说非常麻烦。它不适合你,这并不奇怪。

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


【解决方案1】:

我将尝试介绍人们可能遇到的两种情况:

客户端:

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

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

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

  • 部署后检查您的管理员日志 (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/.* 是否在您的路由配置中明确命名(app.yaml 用于 Python,web.xml 用于 Java)。

  • 部署后检查您的应用程序日志 (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 基础架构将没有任何可注册的内容。

  • 1234563您的 API 根目录,但您的 web.xml (Java) 或 app.yaml (Python) 需要通过 /_ah/spi 的路径是安全的。这将使使用http: 作为协议的请求被重定向(使用302)到使用https: 作为协议的同一页面。在进入实验之前,这是受信任的测试人员论坛上的discussed

【讨论】:

  • 我用 chrome 开发。为确保这不是缓存问题,我使用 Firefox 和 Safari 重新加载。
  • 你的问题让我有些困惑。你指的是developers.google.com/apis-explorer/?base=http://localhost:8888/…,它指向一个本地应用程序,然后说“但是当我部署时,什么都没有改变”。您的意思是 GAE 生产没有任何变化?
  • 所以在本地(localhost:8888/_ah/api/explorer,重定向到发布的 url)一切看起来都很棒。但是当我部署到应用引擎时,myapp.appspot.com/_ah/api/explorer 有一段时间没有更新。
  • 您的失败代码应该有一个堆栈跟踪,您也可以在问题中发布它吗?或者甚至开始一个关于特定堆栈跟踪的新问题?
  • @Animesh - 我已经编辑了答案以删除有关 302 的信息。我觉得这应该是一个单独的问题。或者,如果 bossyLobster 同意,可以按照他想要的答案自行编辑。您添加的信息应该仍然在帖子的编辑修订中可用。
【解决方案2】:

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

我在 localhost 上测试了我的端点,它运行良好。

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

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

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

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

【讨论】:

    【解决方案3】:

    我注意到,如果您是第一次上传您的应用,而您的 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,并且我的端点正在更新。我猜对于那些看到他们的端点没有被更新的人来说,他们会恢复到他们在 /_ah/spi/ 上为 ssl 所做的第一个配置。

    偏航。

    【讨论】:

      【解决方案4】:

      当我使用此 URL 调用我的 API

      时,我遇到了同样的错误 Not Found(404 错误代码)

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

      我尝试了所有方法,最后通过从 WEB-INF 中删除 discovery 文件并仅保留 MY_SERVICE-v1.api 来修复它,然后重新部署了 API。现在可以正常使用了。

      【讨论】:

        【解决方案5】:

        在部署新版本后,我还收到了陈旧的 API 发现文档,GAE 花了几分钟才开始为我提供新版本。

        【讨论】:

          【解决方案6】:

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

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

          if (!blocked){ .... }
          

          我把它改成:

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

          它就像一个魅力。所以从表面上看,GAE 会扫描新的 API 方法并且不接受某些快捷方式。

          【讨论】:

            猜你喜欢
            • 2016-09-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-11-17
            • 1970-01-01
            • 2020-05-06
            相关资源
            最近更新 更多