我有两个应用程序,一个在Python中,另一个在Java中。
在Python中,我的应用程序位于app.yaml
中设置的服务下,cron.yaml
也调用该服务。
在我的(Maven)Java应用程序中,它不在服务之下,因此它是默认服务(如果需要,我将更改)。该应用也会使用。./WEB-INF/cron.xml
文件以及../WEB-INF/appengine-web.xml
目前他们没有相互联系,我将这两个应用程序部署到不同的项目。
我想将它们融合并将它们放在同一个项目中:
python-app.project.appspot.com
和
java-app.project.appspot.com
而不是当前的
python-app.project1.appspot.com
和
project2.appspot.com
我没有尝试使用app.yaml和appengine-web.xml文件,因为我不知道是否要修改它们。
如何使用不同语言(Python和Java)制作不同的服务(模块)
答案 0 :(得分:3)
由于网址路由规则,appspot.com
上生成的应用的命名与您提到的有点不同。来自Routing via URL:
将请求发送到默认版本的可用实例 命名服务:
https://service-dot-app-id.appspot.com http://service.my-custom-domain.com
因此,假设您的服务名为python
和java
且您的应用名为app
,则您的appspot.com
网址将为:
python-dot-app.appspot.com
java-dot-app.appspot.com
但您可以使用自定义域将它们映射到它们。
至于构建这样的app:
请注意,需要的服务之一名为default
(或保持未命名)
为每项服务创建应用程序子目录(遵循以前在文档中找不到的多服务应用程序结构图片,但在Can a default service/module in a Google App Engine app be a sibling of a non-default one in terms of folder structure?中捕获)
将每个服务代码的全部内容复制到相应的子目录
识别您拥有的应用级配置文件(cron.yaml
,dispatch.yaml
,queue.yaml
和index.yaml
或其等效的java)并将其移动一级,在应用程序级目录(如果两个服务中都存在这样的配置文件,您可能需要合并它们)。您可能需要为这些文件选择一种语言,我会选择python。 Cron作业需要配置目标(请参阅Cron job definitions中的target
行)。
请记住,部署一个/所有模块可能不一定会像您习惯的那样更新这些文件,而是可能需要明确部署它们 - 请查看相应的服务配置文档。在部署服务时,您应该留意可能会覆盖这些配置,您可能需要提出一定的部署顺序。
添加dispatch.yaml
文件并重新访问/调整服务的请求路径名称空间可能是一个好主意(可能是强制性的),以确保每个请求都正确定向到相应的服务。从Cron job definitions的target
行开始特别关注cron作业:
如果您使用dispatch file,您的工作可能会被重新路由。对于 例如,给出以下 cron.yaml 和 dispatch.yaml 文件,作业将在 module2 中运行,即使其目标是 module1 :
# cron.yaml cron: - description: "test dispatch vs target" url: /tasks/hello_module2 schedule: every 1 mins target: module1 # dispatch.yaml: dispatch: - url: '*/tasks/hello_module2' module: module2
https://cloud.google.com/appengine/docs/python/config/cronref#cron_job_definitions