2016-06-02 8 views
9

die neuen Dokumentation von GAE NDB Datastor Lesen: https://cloud.google.com/appengine/docs/python/ndb/modelclass#class_methodsGAE NDB Datastor neue Funktion: Zugang Datastor Einrichtungen aus ander GAE App

get_by_id(id, parent=None, app=None, namespace=None, **ctx_options) 

Returns an entity by ID. This is really just a shorthand for Key(cls, id).get() .

Arguments

id A string or integer key ID. parent Parent key of the model to get.

app (keyword arg) ID of app. If not specified, gets data for current app.

namespace (keyword arg) Namespace. If not specified, gets data for default namespace.

**ctx_options Context options Returns a model instance or None if not found.

ich entdecken diese neuen app Parameter. Das ist was ich seit langer Zeit gebraucht habe !!!!! ich gerade versucht, den Zugriff auf Datenspeicher von App „xxxxxdev“ von app „xxxxxglobal“ aber ich bekomme diese Fehlermeldung:

File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/datastore/datastore_rpc.py", line 1373, in check_rpc_success 
    raise _ToDatastoreError(err) 
BadRequestError: app s~xxxxxglobal cannot access app xxxxxxdev's data 

ich die Konten Dienste hinzugefügt [email protected] und [email protected] als Admin der anderen in diesem Link: https://console.cloud.google.com/iam-admin/iam/

Aber ich bekomme immer noch das Problem.

Kann mir jemand helfen? Ich muss wissen, wo in der Systemsteuerung ich Datenspeicher Zugriff auf andere App in App Engine gewähren kann.

+0

würde ich gerne eine Antwort auf diese zu sehen. Die Inhalte des Google-Dienstkontos sind sehr verwirrend und ich habe keine gute Dokumentation gefunden. –

+0

Möglicherweise im Zusammenhang mit dieser kommenden Funktion: https://code.google.com/p/googleappengine/issues/detail?id=1300. –

+0

Etwas * könnte * bereits funktionieren, wie in dieser Antwort vorgeschlagen: http://StackOverflow.com/a/25747058/4495081 –

Antwort

1

Derzeit verwendet ndb nicht die Cloud Datastore-API und kann im normalen Betriebsmodus keine Verbindung zum Datastore einer anderen App herstellen - es verbindet sich nativ mit dem Datastore der App, auf der der Code ausgeführt wird.

Sie können jedoch die remote api verwenden, um eine Verbindung zu den Datastores verschiedener Anwendungen aus der Entwicklungsumgebung herzustellen.

Zurzeit gibt es [eine offene Funktionsanfrage in der Public Issue Tracker for App Engine für die Möglichkeit des Zugriffs auf mehrere Datenspeichern von einer einzigen App. Fühlen Sie sich frei ein Feature Request für NDB speziell zu schreiben, obwohl von the following comments in the source scheint es dies schon etwas ist, das ausgearbeitete auf Wesen:

current_app_id = os.environ.get('APPLICATION_ID', None) 
    if current_app_id and current_app_id != app_id: 
    # TODO(pcostello): We should support this so users can connect to different 
    # applications. 
    raise ValueError('Cannot create a Cloud Datastore context that connects ' 
        'to an application (%s) that differs from the application ' 
        'already connected to (%s).' % (app_id, current_app_id)) 
    os.environ['APPLICATION_ID'] = app_id