Ich frage mich, ob es möglich ist, remote_api_stub aus einem Skript zu verwenden, das auf dem lokalen dev_appserver.py ausgeführt wird.Kann ich remote_api_stub in einer Google App verwenden, um eine Verbindung zum Remote-/Produktionsdatenspeicher herzustellen?
Ich konnte erfolgreich über einen remote_api_stub von einem Basisskript, das von der Befehlszeile aus ausgeführt wird, eine Verbindung zu dem Entwicklungs-/Produktionsdatenspeicher herstellen, daher bin ich ziemlich sicher, dass app.yaml korrekt eingerichtet ist.
Wenn ich eine Liste von Benutzerobjekten von meinem lokalen Entwicklungsserver finden möchte, kann ich einfach den Stub einrichten, um eine Verbindung zum lokalen Server herzustellen, und dann die ndb-Modelle wie gewohnt abrufen.
DEV_HOSTNAME = 'localhost'
DEV_PORT = '54256'
DEV_SERVER = '%s:%s' % (DEV_HOSTNAME, DEV_PORT)
DEV_PATH = '/_ah/remote_api'
DEV_SECURE = False
remote_api_stub.ConfigureRemoteApiForOAuth(DEV_SERVER, DEV_PATH, secure=DEV_SECURE)
users = User.query()
# at this point users will contain data from the DEVELOPMENT server
Wenn ich eine Liste von Benutzerobjekte aus dem Produktionsserver finden wollte, ich habe nur
PROD_SERVER = 'myappid.appspot.com'
PROD_PATH = '/_ah/remote_api'
PROD_SECURE = True
remote_api_stub.ConfigureRemoteApiForOAuth(PROD_SERVER, PROD_PATH, secure=PROD_SECURE)
users = User.query()
# at this point users will contain data from the PRODUCTION server
Beide dieser Arbeit einige der Pfade zu ändern, wie erwartet und kehrt mir den richtigen Daten.
Das Problem beginnt, wenn ich versuche, die remote_api_sub in jedem Codeabschnitt einzurichten, der tatsächlich auf der Instanz dev_appserver.py ausgeführt wird.
Zum Beispiel, wenn ich versuche, den Stub auf einem Basic Request-Handler zu konfigurieren, stoße ich auf einige Probleme.
Wenn ich remote_api_stub.ConfigureRemoteApiForOAuth verwenden, die gleichen params verwenden wie zuvor, erhalte ich einen NotSupportedOnThisPlatform Fehler
INFO 2016-08-30 22:01:40,362 module.py:787] admin: "GET /_ah/start HTTP/1.1" 404 52
INFO 2016-08-30 22:01:47,342 client.py:539] Attempting refresh to obtain initial access_token
INFO 2016-08-30 22:01:47,461 client.py:797] Refreshing access_token
ERROR 2016-08-30 22:01:47,607 webapp2.py:1552]
Traceback (most recent call last):
File "/path/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 1535, in __call__
rv = self.handle_exception(request, response, e)
File "/path/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 1529, in __call__
rv = self.router.dispatch(request, response)
File "/path/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 1278, in default_dispatcher
return route.handler_adapter(request, response)
File "/path/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 1102, in __call__
return handler.dispatch()
File "/path/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 572, in dispatch
return self.handle_exception(e, self.app.debug)
File "/path/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 570, in dispatch
return method(*args, **kwargs)
File "/path/app/admin/controllers/controller.py", line 156, in get
remote_api_stub.ConfigureRemoteApiForOAuth(PROD_SERVER, PROD_PATH, secure=PROD_SECURE)
File "/path/google_appengine/google/appengine/ext/remote_api/remote_api_stub.py", line 768, in ConfigureRemoteApiForOAuth
rpc_server_factory=rpc_server_factory)
File "/path/google_appengine/google/appengine/ext/remote_api/remote_api_stub.py", line 835, in ConfigureRemoteApi
app_id = GetRemoteAppIdFromServer(server, path, rtok)
File "/path/google_appengine/google/appengine/ext/remote_api/remote_api_stub.py", line 569, in GetRemoteAppIdFromServer
response = server.Send(path, payload=None, **urlargs)
File "/path/google_appengine/google/appengine/tools/appengine_rpc_httplib2.py", line 247, in Send
url, method=method, body=payload, headers=headers)
File "/path/google_appengine/lib/oauth2client/oauth2client/client.py", line 562, in new_request
redirections, connection_type)
File "/path/google_appengine/lib/httplib2/httplib2/__init__.py", line 1464, in request
self.disable_ssl_certificate_validation)
File "/path/google_appengine/lib/httplib2/httplib2/__init__.py", line 1143, in __init__
strict, timeout, proxy_info, ca_certs, disable_ssl_certificate_validation)
File "/path/google_appengine/lib/httplib2/httplib2/__init__.py", line 1092, in __init__
raise NotSupportedOnThisPlatform()
NotSupportedOnThisPlatform
INFO 2016-08-30 22:01:47,612 module.py:787] admin: "GET /controller1 HTTP/1.1" 500 2937
So fand ich weiter suchen und dann diese sehr ähnliche Frage und Antwort: here
jedoch sieht es so aus, als ob sie remote_api_stub.ConfigureRemoteApi anstelle von remote_api_stub.ConfigureRemoteApiForOAuth verwenden.
Wenn ich versuche,
zu verwendenremote_api_stub.ConfigureRemoteApi(app_id=None, path='/_ah/remote_api',
auth_func=lambda: ('myemail', 'mypass'),
servername='myappid.appspot.com')
ich
ERROR 2016-08-30 22:06:58,652 webapp2.py:1552] HTTP Error 404: Not Found
Traceback (most recent call last):
File "/path/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 1535, in __call__
rv = self.handle_exception(request, response, e)
File "/path/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 1529, in __call__
rv = self.router.dispatch(request, response)
File "/path/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 1278, in default_dispatcher
return route.handler_adapter(request, response)
File "/path/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 1102, in __call__
return handler.dispatch()
File "/path/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 572, in dispatch
return self.handle_exception(e, self.app.debug)
File "/path/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 570, in dispatch
return method(*args, **kwargs)
File "/path/app/admin/controllers/controller.py", line 154, in get
servername='myappid.appspot.com')
File "/path/google_appengine/google/appengine/ext/remote_api/remote_api_stub.py", line 835, in ConfigureRemoteApi
app_id = GetRemoteAppIdFromServer(server, path, rtok)
File "/path/google_appengine/google/appengine/ext/remote_api/remote_api_stub.py", line 569, in GetRemoteAppIdFromServer
response = server.Send(path, payload=None, **urlargs)
File "/path/google_appengine/google/appengine/tools/appengine_rpc.py", line 409, in Send
self._Authenticate()
File "/path/google_appengine/google/appengine/tools/appengine_rpc.py", line 555, in _Authenticate
super(HttpRpcServer, self)._Authenticate()
File "/path/google_appengine/google/appengine/tools/appengine_rpc.py", line 293, in _Authenticate
auth_token = self._GetAuthToken(credentials[0], credentials[1])
File "/path/google_appengine/google/appengine/tools/appengine_rpc.py", line 232, in _GetAuthToken
response = self.opener.open(req)
File "/usr/lib/python2.7/urllib2.py", line 410, in open
response = meth(req, response)
File "/usr/lib/python2.7/urllib2.py", line 523, in http_response
'http', request, response, code, msg, hdrs)
File "/usr/lib/python2.7/urllib2.py", line 448, in error
return self._call_chain(*args)
File "/usr/lib/python2.7/urllib2.py", line 382, in _call_chain
result = func(*args)
File "/usr/lib/python2.7/urllib2.py", line 531, in http_error_default
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
HTTPError: HTTP Error 404: Not Found
INFO 2016-08-30 22:06:58,656 module.py:787] admin: "GET /controller1 HTTP/1.1" 500 3129
Wenn ich versuche zu verwenden (die app_id Einstellung selbst)
remote_api_stub.ConfigureRemoteApi(app_id=myappid, path='/_ah/remote_api',
auth_func=lambda: ('myemail', 'mypass'),
servername='myappid.appspot.com')
Ich erhalte den gleichen HTTP-Fehler 404 wie zuvor
So weit Als E-Mail- und Passwort-Kombination, die verwendet werden soll, wenn OAuth nicht verwendet wird, habe ich den Benutzernamen/das Passwort versucht, der Eigentümer der App ist und das nicht zu funktionieren scheint.
Ich musste ein Dienstkonto mit dem geheimen Schlüssel einrichten, damit die Befehlszeile ConfigureRemoveApiForOAuth stuff funktioniert. Ich habe mich über die Verwendung dieser E-Mail [email protected]
gewundert, aber ich war mir nicht sicher, was das Passwort sein würde, also dachte ich, dass das wahrscheinlich nicht korrekt ist.
Ich habe auch versucht, die remote_api_stub innerhalb von appengine_config.py statt in den einzelnen Handlern einzurichten und alle Probleme sind gleich.
Ich habe das auch mit vm: true und ohne in der app.yaml versucht, und es scheint keinen Unterschied zu machen.
Um es zusammenzufassen: Ist es möglich, die remote_api_stub verwenden, um eine Verbindung zu einem Google App-Modul Datenspeicher aus Code innerhalb der Google App selbst? Ich kann bereits auf die Datenspeicher von AUSSERHALB der Anwendung zugreifen, aber jeder Code, der im Inneren ausgeführt wird, scheint nicht zu funktionieren.
Dank
edit: Das betreffende Konto hat
‚erlauben weniger sichere Apps in oder was auch immer Einstellung zu protokollieren, die in Google auf ON ist‘