2017-12-04 1 views
0

내가 구글 앱 엔진을 사용하여 데이터 저장소 기능을 테스트하기 위해 노력하고있어 내 코드가 로컬 개발 서버에서 예상 작품으로하십시오 GAE 프로젝트에 배치 된 후,코드가 로컬 개발 서버에서 작동 할 때 왜 GAE가 서버 오류를 반환합니까?

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

} 

그러나에 다음과 같은 메시지를 반환 있어요 방문자 :

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

오류는 애플리케이션이 종료되었음을 알려줍니다. log.Fatalf 호출로 인해 응용 프로그램이 종료되었을 수 있습니다. [appengine logger] (https://cloud.google.com/appengine/docs/standard/go/logs/reference)를 사용하여 log.Fatalf를 호출하는 대신 오류를 기록하고 처리기에서 돌아옵니다. 무엇이 잘못되었을지를 결정하기 위해 콘솔의 오류를보십시오. –

+0

appengine logger를 사용하고 일반 로그 패키지를 제거했지만 log.Fatalf를 제거해도 문제가 해결되지 않았습니다. client.Put 함수가 문제의 원인 인 것처럼 보입니다. 주석을 달아 웹 페이지로드가 잘되지만 왜 그럴까요? – user

+0

Put에서 반환 된 오류는 무엇입니까? –

답변

1

"cloud.google.com/go/datastore"패키지가 문제의 원인임을 알게되었습니다. 대신 솔루션은 'google.golang.org/appengine/datastore'패키지를 사용하여 구현되어야합니다. 이전 패키지는 GAE와 호환되지 않는 것으로 보입니다. 후자의 패키지로 전환하면 작업 코드가 생성됩니다. GAE의 Datastore에 대한 더 나은 지침서는 다음과 같아야합니다. https://cloud.google.com/appengine/docs/standard/go/getting-started/creating-guestbook

+1

무엇보다 유용한 튜토리얼? 거기에 튜토리얼 밖에서 잘못된 라이브러리를 사용하는 경우, 그것을 수정해야합니다. –

+0

코드는 다음에서 가져온 것입니다. https://cloud.google.com/datastore/docs/reference/libraries#client-libraries-usage-go – user

+0

(해당 페이지는 appengine 패키지를 사용하지 않았으므로 아마 이런 식으로 적응하려고 시도한 자신의 잘못이지만, 두 버전은 혼란스럽고 저와 유사합니다. 심지어 일부 사용자는 두 가지 버전 중 하나를 사용할 수 있다고 제안했습니다. – user

관련 문제