用Go开启AppEngine

时间:2015-08-01 13:49:38

标签: google-app-engine go

我最近开始玩AppEngine,但我在打开文件时遇到了问题。以下是我使用的代码:

if _, err := os.Open("/pizza.webp"); err != nil {
    printError(err.Error())
}

这给了我错误:open /pizza.webp: operation not permitted

我尝试使用.png代替并获得相同的结果。我也尝试没有斜线,斜线前面有一个点,两者都导致错误no such file or directory所以我猜测我的路径是正确的但是由于某种原因我不会有权访问它,也许我需要在app.yaml中写一些东西?现在app.yaml看起来像这样:

application: pizzarobot-telegram
version: 1
runtime: go
api_version: go1

handlers:
- url: /.*
  script: _go_app

这是我的应用程序ID的默认app.yaml。我尝试过通过app.yaml设置一个静态目录但是既不能正常工作,我已经读过AppEngine将静态文件存储在那种情况下的代码之外。

我也是Go的新手,所以我可能会做错误的方式而且可能不是AppEngine的问题但我过去使用过os.Open而没有AppEngine而且这样做有效,所以我没有&# 39;不知道我在这里失踪了什么。

1 个答案:

答案 0 :(得分:2)

它应该没有斜线。文件路径是相对于项目根目录的(app.yaml所在的位置)。

我刚尝试了3个文件:

main.go
app.yaml
pizza.txt

main.go

package main

import (
    "io"
    "net/http"
    "os"
)

func init() {
    http.HandleFunc("/pizza.txt", func(res http.ResponseWriter, req *http.Request) {
        f, err := os.Open("pizza.txt")
        if err != nil {
            http.Error(res, err.Error(), 500)
            return
        }
        defer f.Close()

        io.Copy(res, f)
    })
}

pizza.txt

Totally Works!

app.yaml

application: astute-curve-100822
version: 1
runtime: go
api_version: go1

handlers:
- url: /.*
  script: _go_app

它在本地和应用引擎上运行。