2016-08-30 2 views
0

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 verwenden
remote_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‘

Antwort

Verwandte Themen