当前位置: 首页 > 知识库问答 >
问题:

Google App Engine API静态架构

龚钧
2023-03-14

我正试图(con)找到构造JS客户端NodeJS服务器应用程序的最佳方法,将其托管在谷歌云AppEngine(可能还有其他GCP资源)上。所以我在这里寻找建议/最佳实践。

我们有一个API服务器在非默认AppEngine服务上运行,希望能够在同一个项目上运行多个版本,例如开发/暂存/生产版本(如果可能)。

我们希望在此系统上托管/服务我们的静态客户端应用程序,因为我们希望使用同一个域来指向它。

在我们基于服务器的正常设置中,客户端应用程序在域上代理/服务。com/和对API的请求位于域中。com/v1/

我一直在通过不同的选项-托管在AppEngine上运行的单独静态站点并使用dispatch.yaml尝试路由请求-此选项似乎不适用于域前缀,只有通配符,例如。

dispatch:
- url: "my-client-service-project.appspot.com/"
  service: my-client-service
- url: "my-client-service-project.appspot.com/v1/*"
  service: my-backend-service

不起作用,但是:

- url: "*/v1/*"
  service: my-backend-service

是的,我们不想这样,因为我们想运行dev,staging

我一直在考虑的另一个选择是将静态文件夹作为我的应用程序的一部分托管,但我似乎也无法实现这一点,以下是我的应用程序的片段。yaml

handlers:
  - url: /.*
    static_files: client/dist/index.html
    upload: frontend/dist/index.html
  - url: /v1/*
    script: dist/index.js

我的猜测是,script可能与Python应用程序的工作原理不一样,但我可能错了——文档不是很清楚。

理想情况下,我希望将客户端前端静态文件托管在存储器上,并指向AppEngine API服务器(无需特别指向客户端的域,例如/v1/auth/login,而不是我的后端服务项目。appspot.com/v1/

参考资料:

如何在google flex/app engine环境中使用bucket存储服务静态文件?

节点。谷歌应用引擎提供的js静态内容

https://cloud.google.com/appengine/docs/flexible/nodejs/serving-static-files

https://cloud.google.com/appengine/docs/standard/python/how-requests-are-routed#routing_via_url

https://cloud.google.com/appengine/docs/standard/python/config/appref

https://cloud.google.com/appengine/docs/standard/python/config/dispatchref

共有2个答案

何兴安
2023-03-14

把这个答案作为@Dan Corneliscu的补充,因为我认为它非常有用,并且总结了你做错了什么以及在你提出的场景类型中可以实现什么。无论如何,我想提供更多可能有用的信息。

至于您建议的分派规则方法不起作用的原因,您应该相应地更新应用程序中的路径。他们现在应该听/v1/your_endpoint,而不是像以前那样听/your_endpoint。仅更改调度文件是不够的。然后还要确保在应用程序引擎中填充了Dispatch routes字段

此外,您建议的另一种方法在使用静态_文件时确实不起作用,但您可以遵循本指南,说明如何从GAE灵活的应用程序中提供静态文件。

杨曜瑞
2023-03-14

首先:您正在混淆标准和灵活的env文档-这不是一个好主意,因为它们的工作方式不同。请参阅如何判断Google App Engine留档页面是否适用于标准或灵活环境。

由于您的应用程序是Node. JS,因此您必须使用灵活的env,scriptstatic_filesapp.yaml内不适用。这就是为什么您无法让它们工作。

列表中的第一个引用显示了为静态文件提供服务的选项。但我有点怀疑您是否希望使用共享GCS选项——无论开发/登台/生产环境如何,它都将提供相同的内容,因此:

  • 您不能有不同的客户端环境
  • 由于客户端引用只能指向一个方向(即环境,如果我正确理解您的意图),您如何看待选择特定的服务器端环境

如果你希望使用一个域,这意味着你仍然可以使用不同的子域(该域的子域),如果你愿意使用自定义域,这可能是你感兴趣的:如何使用GAE的dispatch。具有多种开发环境的yaml?

更新:

节点。JS目前也可以在标准环境中使用,因此您可以使用这些功能,请参见:

  • 现在,您可以将Node.js应用部署到App Engine标准环境
  • Google App Engine Node.js标准环境文档
 类似资料:
  • 我不得不承认,随着iOS8的发布,我对iOS中的动态和静态框架有点困惑。 我正在寻找一种方法来分发我创建的库,我需要支持iOS7和更高版本。(注意:这将是一个专有的框架。我不能使用可可荚,我也不能分发源代码)。下面是我已经知道的: iOS 8为iOS引入了“嵌入式框架”,但据我所知,它们不适用于iOS 7,仅适用于iOS 8及以上版本。 我可以选择将我的库作为静态库(.a文件)分发,还可以分发头。

  • 我尝试为Android (*)构建静态库。a)。我的个人档案: 文件无题3.cpp和无题3.h非常简单。当我构建项目时,我得到了唯一的一个库 *.a,但预计所有架构都有四个库:armeabi-v7a arm64-v8a x86 x86_64 当我第一次构建时,编译完成时出错: 在文件夹armeabi-v7a arm64-v8a x86中x86_64只存在*. obj-文件,但不存在. a-文件。我

  • Play框架的主要功能是提供动态响应的内容。但一个网络项目中必然有大量的静态内容,比如图片、Javascript文件、CSS文件等。我下面介绍如何在Play项目中加入静态文件。 默认路径 Play项目的静态文件一般存储在根目录下的public文件夹。新建Play项目时,routes文件会有下面的默认记录: # Map static resources from the /public folder

  • 问题内容: 直到几周前,我还以为我知道何时创建字段和方法或。例如,当一个字段(例如另一个类的对象)对于该类的任意数量的对象是唯一的时,应将其设置为。 但是几周后,我读到了有关JVM垃圾收集的信息。 我知道字段永远不会被垃圾收集,并且始终保持在内存中,除非类加载器本身是垃圾收集的。 但是,如果我不创建该字段,至少它将被垃圾回收。 因此,在使字段/方法静态化与否之间似乎有一条 很细的界限 。 有人可以

  • 问题内容: 只是为了澄清我正在考虑的这个权利,在Java中,静态字段是整个类使用的变量/字段,还是可以用于引用该类的所有对象?非静态字段是由对象定义的变量吗?并且与对象1引用相同类的第二个对象可以具有与对象1的静态字段不同的值吗? 问题答案: 与实例变量不同,在创建该类的实例之前,可以访问该类中的静态字段或静态类变量。在运行时创建该类的实例时,将创建该类中的实例变量(非静态变量)。因此,直到创建该

  • 我想澄清一下,在java中,静态字段是整个类使用的变量/字段,或者可以被引用该类的所有对象使用?非静态字段是由对象定义的变量?第二个对象引用与对象1相同的类,它可以对对象1的静态字段具有不同的值?