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

在 Google App Engine 中托管 Go 项目时应如何处理文件路径?

在 Google App Engine 中托管 Go 项目时应如何处理文件路径?

Go
九州编程 2023-07-17 14:28:52
我正在尝试在 Google 的应用程序引擎上部署简单的 go 语言代码。这是我试图部署的代码。 https://github.com/GoogleCloudPlatform/golang-samples/tree/master/appengine/go11x/static主程序package mainimport (    "fmt"    "html/template"    "log"    "net/http"    "os"    "path/filepath"    "time")var (    indexTmpl = template.Must(        template.ParseFiles(filepath.Join("templates", "index.html")),    ))func main() {    http.HandleFunc("/", indexHandler)    // Serve static files out of the public directory.    // By configuring a static handler in app.yaml, App Engine serves all the    // static content itself. As a result, the following two lines are in    // effect for development only.    public := http.StripPrefix("/public", http.FileServer(http.Dir("public")))    http.Handle("/public/", public)    port := os.Getenv("PORT")    if port == "" {        port = "8080"        log.Printf("Defaulting to port %s", port)    }    log.Printf("Listening on port %s", port)    log.Fatal(http.ListenAndServe(fmt.Sprintf(":%s", port), nil))}// indexHandler uses a template to create an index.html.func indexHandler(w http.ResponseWriter, r *http.Request) {    if r.URL.Path != "/" {        http.NotFound(w, r)        return    }    type indexData struct {        Logo        string        Style       string        RequestTime string    }    data := indexData{        Logo:        "/public/gcp-gopher.svg",        Style:       "/public/style.css",        RequestTime: time.Now().Format(time.RFC822),    }    if err := indexTmpl.Execute(w, data); err != nil {        log.Printf("Error executing template: %v", err)        http.Error(w, "Internal server error", http.StatusInternalServerError)    }}问题:如何处理我希望应用程序读取的模板和其他小文件?我的应用程序是一个玩具应用程序,因此我不需要云存储或任何此类解决方案。我只想从(本地)目录中读取内容。
查看完整描述

1 回答

?
holdtom

TA贡献1805条经验 获得超10个赞

所以...我用 3 种不同的方式测试了这个部署,我发现:

  1. 使用 , 直接将存储库克隆到静态文件夹,然后从那里进行部署,重现了该问题,但前提是我是从 Google Cloud Shell 执行此操作的git clonecd

    A。后来我发现我在 Cloud Shell 中使用的 Go 版本是 Go 1.12。

    b. 我创建了一个新的 VM 实例,以在全新的 Go 1.11 环境中对其进行测试,并且相同的过程运行得非常顺利。

  2. 与上面的过程相同,但我没有从静态部署,而是将其内容移动到另一个目录,然后从那里部署它。

    A。这在 VM 实例和 Cloud Shell 中有效。

  3. 根据App Engine 标准环境中的 Go 1.11 快速入门中的建议,我使用go get命令将示例代码下载cd到静态文件夹并从那里进行部署。

    A。这在两种环境中都有效。

我的建议是始终尝试使用该go get命令下载 Google 的 golang 示例,正如指南中所建议的那样,并且在我所做的测试中它没有扰乱 App Engine 部署。

还值得一提的是,这两个环境具有相同的 Cloud SDK 版本,即 259。


查看完整回答
反对 回复 2023-07-17
  • 1 回答
  • 0 关注
  • 91 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信