使用dev_appserver.py和google.golang.org/appengine@v1.6.6连接到Google Cloud Datastore。

huangapple go评论79阅读模式
英文:

Connect to Google Cloud Datastore using dev_appserver.py & google.golang.org/appengine@v1.6.6

问题

正如标题所说。我们有一个遗留的Go 1.11 AppEngine API,需要使用dev_appserver.py来运行。简单来说,我希望appengine.Main()appengine.NewContext(r)允许我的应用程序使用我的project-id指向我的Cloud Datastore,而不是本地模拟器的存储。我已经设置了GOOGLE_APPLICATION_CREDENTIALS,但没有成功。

这样我就可以在本地运行服务器,同时访问一个共享的Cloud DB。

我正在使用google.golang.org/appengine@v1.6.6dev_appserver.py --enable_console --port=8081 --support_datastore_emulator=true --go_debugging=true app.yaml

这种情况是否可能?或者在使用旧的Go库时,我是否被困在本地模拟器上?

英文:

As the title says. We have a legacy Go 1.11 AppEngine API that requires the dev_appserver.py to run. Simply, I want appengine.Main() & appengine.NewContext(r) to allow my application to point to my Cloud Datastore using my project-id, rather than the local emulator's storage. I have set GOOGLE_APPLICATION_CREDENTIALS to no avail.

This would be so I can locally run the server, while accessing a shared, Cloud DB.

I am using google.golang.org/appengine@v1.6.6 w/ dev_appserver.py --enable_console --port=8081 --support_datastore_emulator=true --go_debugging=true app.yaml

Is this possible? Or am I stuck on a local emulator when using the old Go libraries?

答案1

得分: 1

从评论转为回答

  1. 请查看Go 1.11的remote_api文档,链接为https://cloud.google.com/appengine/docs/legacy/standard/go111/tools/remoteapi

  2. 使用remote_api的逻辑大致如下:

    如果在本地环境中运行,则使用remote_api,否则使用默认行为(即在本地环境中使用模拟器,在生产环境中直接使用生产数据)。

    为了简化问题,你可以尝试使用相同的变量名,例如:

    if 这是本地环境
      ctx, err := remote_api.NewRemoteContext(host, hc)
    else
      ctx := appengine.NewContext(r)
    

    然后在其余的数据存储查询/调用中使用'ctx'。

    **注意:**我对'Go'不熟悉,所以请将上述代码视为伪代码而非可工作的代码。

  3. 你可能还想考虑不使用--support_datastore_emulator=true标志来运行上述更改。

英文:

Moving from comments to answer

  1. Take a look at remote_api for Go 1.11 https://cloud.google.com/appengine/docs/legacy/standard/go111/tools/remoteapi

  2. The logic for using it would be something along the lines of -

    If running on local environment, use remote_api else stick to the default behavior (i.e. since remote_api isn't enabled, it will either use the emulator in local environments or use production data directly in production)

    To keep things simple, you could try using same variable name i.e.

    if this is local environment
     ctx, err := remote_api.NewRemoteContext(host, hc)
    else
     ctx := appengine.NewContext(r)
    
    

    Then you use 'ctx' in the rest of your queries/calls to datastore

    Note: I'm not familiar with 'Go' so take the above as pseudo-code and not working code

  3. You might also want to consider not running the above changes with the --support_datastore_emulator=true flag

huangapple
  • 本文由 发表于 2022年12月9日 21:08:15
  • 转载请务必保留本文链接:https://go.coder-hub.com/74743584.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定