Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google app engine 当代码在本地开发服务器中工作时,为什么GAE返回服务器错误?_Google App Engine_Go_Google Cloud Datastore - Fatal编程技术网

Google app engine 当代码在本地开发服务器中工作时,为什么GAE返回服务器错误?

Google app engine 当代码在本地开发服务器中工作时,为什么GAE返回服务器错误?,google-app-engine,go,google-cloud-datastore,Google App Engine,Go,Google Cloud Datastore,我正在尝试使用Google App Engine测试数据存储功能,我的代码在本地开发服务器中正常工作: // code based on the following guide: https://cloud.google.com/datastore/docs/reference/libraries#client-libraries-install-go package datastoretest import ( "fmt" "log" "net

我正在尝试使用Google App Engine测试数据存储功能,我的代码在本地开发服务器中正常工作:

// code based on the following guide: https://cloud.google.com/datastore/docs/reference/libraries#client-libraries-install-go
package datastoretest

import (
        "fmt"
        "log"
        "net/http"
        "cloud.google.com/go/datastore"
        "google.golang.org/appengine" 
)

type Task struct {
        Description string
}

func init() {
    http.HandleFunc("/", handler)
}

func handler(w http.ResponseWriter, r *http.Request) {

    ctx := appengine.NewContext(r)

    // Set Google Cloud Platform project ID.
    projectID := "myProjectID" //note: actual ID is different

    // Creates a client.
    client, err := datastore.NewClient(ctx, projectID)
    if err != nil {
        log.Fatalf("Failed to create client: %v", err)
    }

    // Sets the kind for the new entity.
    kind := "Task"
    // Sets the name/ID for the new entity.
    name := "sampletask1"
    // Creates a Key instance.
    taskKey := datastore.NameKey(kind, name, nil)

    // Creates a Task instance.
    task := Task{
            Description: "Buy milk",
    }

    // Saves the new entity.
    if _, err := client.Put(ctx, taskKey, &task); err != nil {
            log.Fatalf("Failed to save task: %v", err)
    }

    fmt.Fprint(w, "Saved ", taskKey, ":", task.Description)

}
但是,在部署到GAE项目后,它将向访问者返回以下消息:

Error: Server Error
The server encountered an error and could not complete your request.
Please try again in 30 seconds.

我发现使用包“cloud.google.com/go/datastore”导致了这个问题。相反,解决方案应该使用包“google.golang.org/appengine/datastore”来实现。在我的实现中,前一个包似乎与GAE不兼容。切换到后一个软件包会产生工作代码。对于GAE中的数据存储,下面应该是一个更好的教程:

错误告诉您应用程序已退出。应用程序可能由于调用log.Fatalf而退出。使用记录错误并从处理程序返回,而不是调用log.Fatalf。查看控制台中的错误以确定可能的错误。我使用appengine logger并删除了常规日志包,但删除了log。Fatalf并没有停止该问题。似乎函数client.Put是问题的原因,因为注释它会使网页加载正常,但为什么?Put返回的错误是什么?我看不到Put的具体错误。页面一直在加载,最后日志说“这个请求导致应用程序启动了一个新进程,从而导致应用程序代码第一次被加载。因此,这个请求可能比应用程序的典型请求花费更长的时间和更多的CPU。”然后它说“进程已终止,因为已超过请求截止日期。(错误代码123)“我与此代码有另一个可能相关的问题:在与本地数据存储进行检查时,该实体似乎没有实际保存:“数据存储在空命名空间中没有实体。然而,client.Put没有产生错误,因为返回的error=nil。比什么更好的教程?如果有教程要求使用错误的库,则需要修复。代码取自此教程:(该页面未使用appengine软件包,因此可能是我自己的错误,试图以这种方式进行修改,但这两个版本对我来说非常相似,一些用户甚至建议我们可以使用其中一个)