Google App Engine - 本地开发服务器和部署服务器之间的区别

我正在 Google App Engine 上编写一个应用程序,并且我已经能够编写在本地运行并将数据放入本地数据存储区的代码。但是,当我将代码部署到 google 服务器时,没有数据放入数据存储区。我的主要指标是,没有任何内容被放入数据存储区,一是当我进入开发者控制台时,我被告知没有条目,二是当我运行获取数据的页面时,没有返回任何内容。


我是否需要在 app.yaml 或开发者控制台中定义新种类,然后才能在生产数据存储上工作?


这是我从数据存储中获取的 put 和 get 方法。同样,在测试环境中有效,在生产中无效,一切都编译得很好。


package tweetdata


import (

    "net/url"

    "time"


    "golang.org/x/net/context"

    "google.golang.org/appengine/datastore"

    "google.golang.org/appengine/log"


    "github.com/ChimeraCoder/anaconda"

)


const linkTweetKind string = "LinkTweet"

const tweetKey string = "Tweets"

const tweetKeyID string = "default_tweetstore"


//LinkTweet contains the address extracted from a tweet and the original tweet

type LinkTweet struct {

    Address *url.URL

    Tweet   anaconda.Tweet

}


//StoreTweet is a struct used for storing a tweet in the datastore

type StoreTweet struct {

    Address     string

    Text        string

    TweetID     int64

    CreatedTime time.Time

    Retweets    int

    Favorites   int

}


//TweetScore is a struct that shows the relative score of an address based on

// it's populatrity

type TweetScore struct {

    Address    *url.URL

    score      int

    lastActive time.Time

}


//WriteLinkTweet writes a given Tweet to the datastore

func WriteLinkTweet(tweet LinkTweet, c context.Context) error {

    log.Infof(c, "Putting Tweet into datastore: %v", tweet.Tweet.Id)

    key := datastore.NewIncompleteKey(c, linkTweetKind, getTweetKey(c))

    created, _ := tweet.Tweet.CreatedAtTime()

    store := &StoreTweet{Address: tweet.Address.String(),

        Text:        tweet.Tweet.Text,

        TweetID:     tweet.Tweet.Id,

        CreatedTime: created,

        Retweets:    tweet.Tweet.RetweetCount,

        Favorites:   tweet.Tweet.FavoriteCount,

    }


    err := datastore.RunInTransaction(c, func(c context.Context) error {

        _, err := datastore.Put(c, key, store)

        log.Errorf(c, "Failed to write LinkTweet to datastore. %v", err.Error())

        return err

    }, nil)

    return err

}



波斯汪
浏览 212回答 2
2回答

慕尼黑8549860

您是否datastore:,noindex在StoreTweet结构中的任何字段上使用?为了对任何字段运行任何查询,数据存储区必须首先索引您要查询的字段。所以不索引这些字段会导致查询返回 nil 而没有任何错误。首次运行查询后,您的开发服务器是否会在您的项目中自动创建 index.yaml 文件?生产数据存储使用此文件来决定应该索引哪些字段,所有未索引的字段将无法查询。根据您提供的信息,这就是我能想到的会导致您的查询返回空的所有信息。为了进一步调试,我将浏览您的生产数据存储并确保您的数据结构正确,并且值设置为您期望的值。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go