为了账号安全,请及时绑定邮箱和手机立即绑定

如何在云函数中提供静态文件,如 swagger ui

如何在云函数中提供静态文件,如 swagger ui

Go
陪伴而非守候 2022-06-27 16:34:28
如何使用 Go 在 Cloud Function 中提供swagger-ui-dist ?在 Cloud Functions 环境之外,我会这样做:package mainimport ("fmt""net/http")func main() {fs := http.FileServer(http.Dir("./swagger-ui-dist"))http.Handle("/swaggerui/", http.StripPrefix("/swaggerui/", fs))http.ListenAndServe(":8080", nil)}但由于云函数使用标准 http.HanlderFunc 接口使用普通函数作为处理程序,我不知道如何使其工作。我试图模拟这种情况以使用 http.ServeFile 进行测试,但没有奏效。似乎没有下载文件夹的所有内容。package mainimport (    "fmt"    "net/http")func cloudFunctionHandler(w http.ResponseWriter, r *http.Request) {    http.ServeFile(w, r, "./swagger-ui-dist")}func main() {    http.HanldeFunc("/swaggerui/", handler)    http.ListenAndServe(":8080", nil)}
查看完整描述

2 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

实际上可以通过三种方式(我知道):


从 CDN 提供静态文件。例如来自http://cdnjs.cloudflare.com/ajax/libs/swagger-ui/3.40.0/

自己在不同的端点上托管静态文件

将静态文件添加到云函数的根文件夹中。这些将与您的代码一起打包,因此在部署时可用

(我选择了选项 3)


对于选项 2 和 3,您必须覆盖 swaggerui 用于其静态资产的文件夹。如何执行此操作取决于您如何配置 swagger ui。


就我而言,我使用的是 flask_restx Python 包来生成swagger.json并提供 swaggerui。所以我像这样猴子补丁:


from flask_restx.apidoc import apidoc


apidoc.static_folder = '<MY STATIC FOLDER PATH' # e.g. os.path.abspath('static/swaggerui')


此外,您需要在运行之前将文件从 swaggerui 库复制到函数的根目录gcloud function deploy ...。


static在 CI 管道期间,我将文件夹从 flask_restx复制到函数的根目录。


希望这对任何人都有帮助!


查看完整回答
反对 回复 2022-06-27
?
ITMISS

TA贡献1871条经验 获得超8个赞

我以多种方式尝试了它,它在本地以与 Cloud Functions 相同的行为(相同的函数签名)工作,但在 Cloud Functions 上部署后它没有工作。

我明白为什么了。事实上,Buildpack(Google 开发的用于构建没有 Dockerfile 的容器的工具,现在在 CNCF 沙箱中)编译 .go 文件并将二进制文件复制到最终容器层。省略所有其他文件/目录。因此,它不能工作!

我推荐你使用Cloud Run(与 Cloud Functions 相同的底层平台,并且在某些情况下更便宜。我写了一篇关于此的文章

另一种解决方案是使用未编译的语言,例如 NodeJS 或 Python。


查看完整回答
反对 回复 2022-06-27
  • 2 回答
  • 0 关注
  • 164 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号