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

我正在尝试在 Google 的应用程序引擎上部署简单的 go 语言代码。这是我试图部署的代码。 https://github.com/GoogleCloudPlatform/golang-samples/tree/master/appengine/go11x/static

主程序

package main


import (

    "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)

    }

}

问题:如何处理我希望应用程序读取的模板和其他小文件?我的应用程序是一个玩具应用程序,因此我不需要云存储或任何此类解决方案。我只想从(本地)目录中读取内容。


九州编程
浏览 99回答 1
1回答

holdtom

所以...我用 3 种不同的方式测试了这个部署,我发现:使用 , 直接将存储库克隆到静态文件夹,然后从那里进行部署,重现了该问题,但前提是我是从 Google Cloud Shell 执行此操作的git clone。cdA。后来我发现我在 Cloud Shell 中使用的 Go 版本是 Go 1.12。b. 我创建了一个新的 VM 实例,以在全新的 Go 1.11 环境中对其进行测试,并且相同的过程运行得非常顺利。与上面的过程相同,但我没有从静态部署,而是将其内容移动到另一个目录,然后从那里部署它。A。这在 VM 实例和 Cloud Shell 中有效。根据App Engine 标准环境中的 Go 1.11 快速入门中的建议,我使用go get命令将示例代码下载cd到静态文件夹并从那里进行部署。A。这在两种环境中都有效。我的建议是始终尝试使用该go get命令下载 Google 的 golang 示例,正如指南中所建议的那样,并且在我所做的测试中它没有扰乱 App Engine 部署。还值得一提的是,这两个环境具有相同的 Cloud SDK 版本,即 259。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go