代码之家  ›  专栏  ›  技术社区  ›  anthony

在OSX上重新启动后,本地GAE数据存储为空

  •  2
  • anthony  · 技术社区  · 9 年前

    我正在构建一个带有Go后端+Polymer前端的Google App Engine应用程序。因此,我正在使用调度。yaml文件同时为两者服务。

    我面临的问题是,当我重新启动计算机时,数据存储是空的。我已经在OSX 10.9.5和10.10.4上测试了这一点。在系统重新启动时,两者都会显示相同的响应。然而,Windows7似乎保留了这些数据。

    文档建议数据应该持久,因为我没有明确地调用clear。事实并非如此。我已尝试使用以下方法设置数据存储位置:

    dev_appserver.py --datastore_path=~/go_apps/data ~/go_apps/my_app
    

    我收到此错误:

    google.appengine.tools.devappserver2.errors.AppConfigNotFoundError: "/Users/anthony/go_apps/my_app is a directory but does not contain app.yaml or app.yml
    

    显然,因为我使用的是调度。yaml文件,它不会。所以,自从 backend 处理数据的 app.yaml 文件,我试图将其设置在那里。我使用以下命令:

    dev_appserver.py --datastore_path=~/go_apps/data ~/go_apps/my_app/backend
    

    这似乎也不起作用,因为我得到了这个错误:

    sqlite3.OperationalError: unable to open database file
    

    可以嗯,现在不知道该去哪里。从我从其他帖子中收集到的数据来看,这些数据是临时存储的。但是,我似乎无法为数据设置自定义的非临时位置。所以,现在我每次重新启动时都会填充一个数据存储,这看起来很荒谬。

    *编辑*

    我尝试了以下操作,似乎它试图启动应用程序,并创建 datastore.db 文件位于正确位置:

    dev_appserver.py --datastore_path ~/go_apps/my_app/data/datastore.db  ~/go_apps/my_app/dispatch.yaml ~/go_apps/my_app/backend/app.yaml ~/go_apps/my_app/frontend/app.yaml
    

    然而,我现在遇到了一个奇怪的错误:

    /var/folders/04/3hxnpxc15wj2k4v40lkdncd00000gn/T/tmpkcQYnFappengine-go-bin/backend.go:13: can't find import: "github.com/gorilla/mux"
    

    Go是否临时构建到该文件夹?该导入是绝对可用的,并且总是构建良好的调用 goapp serve .

    这是我的进口商品的样子 backend.go

    import (
        //standard library
        "fmt"
        "net/http"
        "time"
        "log"
    
        //third party
        "github.com/gorilla/mux"
        "github.com/gorilla/securecookie"
        "github.com/dgrijalva/jwt-go"
        "golang.org/x/crypto/bcrypt"
    
        //my imports
        "github.com/section14/go_polymer_comm_pkg/controller"
    )
    
    2 回复  |  直到 9 年前
        1
  •  3
  •   icza    9 年前

    您必须传递 文件 以用作持久化数据存储, 文件夹。

    然后提供 文件夹 您的应用程序(其中包含 app.yaml ). 不要把这两个词混在一起。所以应该是这样的:

    dev_appserver.py --datastore_path=~/my_app/my_app.db ~/go_apps/my_app
    

    详细信息可在此处找到:

    The Go Development Server / Using the Datastore

    笔记:

    默认的数据存储文件在temp文件夹中,OS-X很可能在系统重启时将其清除,这就是为什么它不会为您保留的原因。另一方面,例如Windows 7在系统重新启动时不会清除临时文件夹。

        2
  •  1
  •   anthony    9 年前

    通过添加这两个选项来启动和运行 GOPATH GOROOT 环境变量添加到我的.bash_profile。总共需要三条路径(第一条路径已设置)才能运行:

    # Add Google AppEngine path
    export PATH=/Users/anthony/go_appengine:$PATH
    
    # GOPATH
    export GOPATH=/Users/anthony/go_appengine/gopath
    export PATH=$PATH:$GOPATH
    
    # GOROOT
    export GOROOT=/Users/anthony/go_appengine/goroot
    export PATH=$PATH:$GOROOT
    

    该命令从项目文件夹内部调用(我的位于appengine文件夹外部),以便启动:

    dev_appserver.py --datastore_path data/datastore.db  dispatch.yaml backend/app.yaml frontend/app.yaml
    

    注意 .yaml 文件仍然存在。如果你不需要 dispatch.yaml 文件

    谢谢@icza的指导。想在一篇文章中组织步骤以便于阅读。