【问题标题】:GAE: Python and Java services together under same App IDGAE:Python 和 Java 服务一起在同一个 App ID 下
【发布时间】:2012-01-19 05:20:21
【问题描述】:

我有一些 Python 服务,并在 app.yaml 中为它们定义了处理程序位置

我也有 Java 服务,并且我已经配置了 web.xml。

我希望它们都在同一个 APP ID 下,例如

那么我怎样才能做到这一点呢?

  • 当我使用GAE Java Eclipse插件时,它只上传Java服务并删除现有的Python服务。
  • 当我使用 appcfg.py update 时,它只上传 Python 服务并删除现有的 Java 服务。

【问题讨论】:

    标签: java python google-app-engine gae-eclipse-plugin


    【解决方案1】:

    有一个hack:上传到不同的版本

    您可以在 Java 中使用一个实例版本,而在 Python 中使用另一个实例版本。默认设置将通过http://myapp.appspot.com 向公众公开。

    您可以通过http://version.myapp.appspot.com 访问其他版本(在浏览器中或以编程方式),例如http://3.myapp.appspot.com

    如果您想通过同一个 URL 访问它们,那么您需要代理请求或进行重定向(如果您的客户端允许)。

    【讨论】:

      【解决方案2】:

      没有官方方法可以在一个应用中使用两个运行时环境。 Jython 是在 Java 运行时环境中运行 Python 代码的一种方式。

      根据您的需要,您可以尝试使用具有相同应用 ID 的两个不同应用版本。一个版本可以使用Java运行环境,另一个可以使用Python运行环境。两个版本都会看到相同的数据存储。您可以使用 appspot.com URL 分别处理每个应用版本,尽管它们并不漂亮:http://version-id.latest.app-id.appspot.com 只有一个版本可以是“默认”版本 (http://myapp.appspot.com)。这使用了 10 个允许版本中的 2 个,并且您必须小心使用正确的版本 ID 部署每个版本。所以这不是一个理想的解决方案。

      【讨论】:

      • “没有官方方法可以在一个应用程序中使用两个运行时环境” - 但您的第二段与此相矛盾。
      • 我希望该声明中的关键词是“官方的”。我没有看到设计中的版本来隔离面向用户的实时代码。在我看来,此功能的“官方”版本将允许我在我的域名后面执行此操作,例如将 URL 路由到可以在不同运行时环境中运行不同代码的不同应用程序实例的前端配置。
      【解决方案3】:

      我确信您只能同时拥有一个应用,因为每种类型都有不同的应用服务器/虚拟机。我的意思是你不能上传不同的部分,不能在同一个应用程序上为不同的 url 有不同的 sdk,等等。

      顺便说一句,你可以尝试使用jython,它可以解释你在Java项目中的Pythong代码。我不确定它是否已准备好生产(几年前我尝试过它时存在很多问题),但它可能对您的情况有所帮助

      【讨论】:

      • 好消息是 Jython 现在在 GAE/J 兼容性列表 (code.google.com/p/googleappengine/wiki/…) 中被列为兼容,所以我认为值得一试。
      • 其实你可以通过一个hack:上传到不同的版本。
      【解决方案4】:

      正如@splix 所说,将两个不同语言的应用程序部署到同一个appid 中似乎是不可能的。那么如何解决方法呢?在您的 Java 应用程序上设置一个 /pythonapp servlet,它将通过 URLFetch 将所有请求重定向到 mypythonapp.appspot.com。

      我想到的这种解决方法的缺点是您丢失了用户 API 提供的有关登录用户的信息,因此您需要在重定向请求中附加信息。根据您的应用程序的场景,我不知道这是否会成为一个节目停止者。

      编辑:我想到的是 Peter 的建议,使用不同的版本而不是将它们部署为完全不同的应用程序,很抱歉我把它们弄混了。部署到不同的应用程序意味着您的 Python 应用程序和 Java 应用程序无法使用共享数据存储。

      我的回答的不同之处在于您可以使用 URLFetches 在不同版本的应用程序之间转发请求。但是按照彼得的建议在客户端执行重定向,而不是像我的回答那样在服务器端执行重定向可能会不那么棘手。

      【讨论】:

      • 这可以通过黑客来完成:上传到不同的版本。看我的回答。
      • headslap 这就是我的意思,不同的版本,而不是不同的应用程序 ID,但我把这些术语混淆了,谢谢你的提醒!让不同的应用 ID 相互合作可能会违反 TOS 的第 4.3e 节。
      猜你喜欢
      • 1970-01-01
      • 2014-05-03
      • 1970-01-01
      • 2015-04-01
      • 2017-01-07
      • 1970-01-01
      • 1970-01-01
      • 2021-10-30
      • 1970-01-01
      相关资源
      最近更新 更多