2016-06-02 9 views
9

lettura la nuova documentazione di GAE NDB datastore: https://cloud.google.com/appengine/docs/python/ndb/modelclass#class_methodsGAE NDB datastore nuova funzionalità: accesso datastore entità provenienti da altri 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.

scopro questo nuovo parametro app. Questo è quello di cui avevo bisogno da tanto tempo !!!!! Ho solo cercato di accedere datastore di app "xxxxxdev" da app "xxxxxglobal", ma ottengo questo errore:

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 

ho aggiunto i servizi di contabilità e [email protected] [email protected] come amministratore l'uno dell'altro in questo link: https://console.cloud.google.com/iam-admin/iam/

Ma continuo a ricevere il problema.

Qualcuno può aiutarmi? Ho bisogno di sapere dove nel pannello di controllo posso garantire l'accesso all'archivio dati ad altre app in App Engine.

+0

Mi piacerebbe vedere una risposta a questo. Le informazioni sull'account del servizio Google sono molto confuse e non ho trovato alcuna buona documentazione. –

+0

Probabilmente correlato a questa funzione imminente: https://code.google.com/p/googleappengine/issues/detail?id=1300. –

+0

Qualcosa * potrebbe * funzionare già, come suggerito in questa risposta: http://stackoverflow.com/a/25747058/4495081 –

risposta

1

Attualmente, ndb non utilizza l'API Cloud Datastore e nella sua normale modalità di funzionamento non può connettersi a Datastore di un'altra app - si connette nativamente al Datastore dell'app su cui è in esecuzione il codice.

È tuttavia possibile utilizzare remote api per collegare ndb ai datastore di diverse app dall'ambiente di sviluppo.

Vi è attualmente [una richiesta di funzionalità aperta nello Public Issue Tracker for App Engine per la possibilità di accedere a più datastore da una singola app. Sentitevi liberi di inviare una richiesta di funzionalità per NDB specificamente, anche se dal the following comments in the source sembra questo è già qualcosa che sta lavorando-on:

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 
Problemi correlati