英文:
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.6
和dev_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
从评论转为回答
-
请查看Go 1.11的
remote_api
文档,链接为https://cloud.google.com/appengine/docs/legacy/standard/go111/tools/remoteapi -
使用
remote_api
的逻辑大致如下:如果在本地环境中运行,则使用
remote_api
,否则使用默认行为(即在本地环境中使用模拟器,在生产环境中直接使用生产数据)。为了简化问题,你可以尝试使用相同的变量名,例如:
if 这是本地环境 ctx, err := remote_api.NewRemoteContext(host, hc) else ctx := appengine.NewContext(r)
然后在其余的数据存储查询/调用中使用'ctx'。
**注意:**我对'Go'不熟悉,所以请将上述代码视为伪代码而非可工作的代码。
-
你可能还想考虑不使用
--support_datastore_emulator=true
标志来运行上述更改。
英文:
Moving from comments to answer
-
Take a look at
remote_api
for Go 1.11 https://cloud.google.com/appengine/docs/legacy/standard/go111/tools/remoteapi -
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. sinceremote_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
-
You might also want to consider not running the above changes with the
--support_datastore_emulator=true
flag
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论