我在使用dev_appserver.py连接到生产数据存储区时遇到问题。
我按照https://cloud.google.com/appengine/docs/standard/python/tools/remoteapi上的教程进行操作 关于从本地脚本使用Google-Datastore,它在运行单个脚本时非常有效。
我创建了一个包含最小appengine应用程序的小型Git存储库,并在appengine_config.py脚本中添加了连接到远程数据存储区的代码。
https://github.com/fcaldas/appengine_remote_datastore
的app.yaml:
runtime: python27
api_version: 1
threadsafe: true
builtins:
- remote_api: on
handlers:
- url: /
script: index.app
index.py:
import webapp2
class MainPage(webapp2.RequestHandler):
def get(self):
self.response.headers['Content-Type'] = 'text/plain'
self.response.write('Hello, World!')
app = webapp2.WSGIApplication([
('/', MainPage),
], debug=True)
appengine_config.py:
import os
try:
import dev_appserver
dev_appserver.fix_sys_path()
except ImportError:
print "Could not import dev_appserver"
pass
if os.environ['SERVER_SOFTWARE'].startswith('Development'):
from google.appengine.ext.remote_api import remote_api_stub
from google.appengine.datastore.entity_pb import Reference
PROJECT_ID = "YOUR-PROJECT-ID"
remote_api_stub.ConfigureRemoteApiForOAuth(
'{}.appspot.com'.format(PROJECT_ID),
'/_ah/remote_api/', secure=False)
Reference.app = lambda *args: os.environ['APPLICATION_ID'].replace('dev~',
's~')
尝试使用此方法将我的应用程序连接到数据存储区时,我收到以下错误(在dev_appserver.py终端上):
INFO 2017-12-06 09:59:03,423 sdk_update_checker.py:231] Checking for updates to the SDK.
INFO 2017-12-06 09:59:09,599 api_server.py:301] Starting API server at: http://localhost:33585
INFO 2017-12-06 09:59:09,603 dispatcher.py:251] Starting module "default" running at: http://localhost:8080
INFO 2017-12-06 09:59:09,603 admin_server.py:116] Starting admin server at: http://localhost:8000
INFO 2017-12-06 09:59:12,314 client.py:515] Attempting refresh to obtain initial access_token
INFO 2017-12-06 09:59:12,317 client.py:755] Refreshing access_token
LOG 0 1512554362991813 _Authenticate configuring auth; needs_auth=False
LOG 0 1512554362991963 Sending request to http://MY-APP-ID-REMOVED.appspot.com/_ah/remote_api/ headers={'content-length': '309', 'X-appcfg-api-version': '1', 'Content-Type': 'application/octet-stream'} body=ELIDED
LOG 0 1512554362992791 _Authenticate configuring auth; needs_auth=False
LOG 0 1512554362992908 Sending request to http://MY-APP-ID-REMOVED.appspot.com/_ah/remote_api/ headers={'content-length': '728', 'X-appcfg-api-version': '1', 'Content-Type': 'application/octet-stream'} body=ELIDED
LOG 0 1512554362993612 _Authenticate configuring auth; needs_auth=False
LOG 0 1512554362993731 Sending request to http://MY-APP-ID-REMOVED.appspot.com/_ah/remote_api/ headers={'content-length': '1147', 'X-appcfg-api-version': '1', 'Content-Type': 'application/octet-stream'} body=ELIDED
LOG 0 1512554362994422 _Authenticate configuring auth; needs_auth=False
LOG 0 1512554362994556 Sending request to http://MY-APP-ID-REMOVED.appspot.com/_ah/remote_api/ headers={'content-length': '1567', 'X-appcfg-api-version': '1', 'Content-Type': 'application/octet-stream'} body=ELIDED
LOG 0 1512554362995171 _Authenticate configuring auth; needs_auth=False
LOG 0 1512554362995280 Sending request to http://MY-APP-ID-REMOVED.appspot.com/_ah/remote_api/ headers={'content-length': '1987', 'X-appcfg-api-version': '1', 'Content-Type': 'application/octet-stream'} body=ELIDED
LOG 0 1512554362995807 _Authenticate configuring auth; needs_auth=False
LOG 0 1512554362995915 Sending request to http://MY-APP-ID-REMOVED.appspot.com/_ah/remote_api/ headers={'content-length': '2407', 'X-appcfg-api-version': '1', 'Content-Type': 'application/octet-stream'} body=ELIDED
LOG 0 1512554362996329 _Authenticate configuring auth; needs_auth=False
LOG 0 1512554362996409 Sending request to http://MY-APP-ID-REMOVED.appspot.com/_ah/remote_api/ headers={'content-length': '2827', 'X-appcfg-api-version': '1', 'Content-Type': 'application/octet-stream'} body=ELIDED
LOG 0 1512554362997029 _Authenticate configuring auth; needs_auth=False
LOG 0 1512554362997134 Sending request to http://MY-APP-ID-REMOVED.appspot.com/_ah/remote_api/ headers={'content-length': '3247', 'X-appcfg-api-version': '1', 'Content-Type': 'application/octet-stream'} body=ELIDED
LOG 0 1512554362997744 _Authenticate configuring auth; needs_auth=False
LOG 0 1512554362997840 Sending request to http://MY-APP-ID-REMOVED.appspot.com/_ah/remote_api/ headers={'content-length': '3667', 'X-appcfg-api-version': '1', 'Content-Type': 'application/octet-stream'} body=ELIDED
LOG 0 1512554362998550 _Authenticate configuring auth; needs_auth=False
LOG 0 1512554362998642 Sending request to http://MY-APP-ID-REMOVED.appspot.com/_ah/remote_api/ headers={'content-length': '4087', 'X-appcfg-api-version': '1', 'Content-Type': 'application/octet-stream'} body=ELIDED
LOG 0 1512554362999223 _Authenticate configuring auth; needs_auth=False
LOG 0 1512554362999315 Sending request to http://MY-APP-ID-REMOVED.appspot.com/_ah/remote_api/ headers={'content-length': '4507', 'X-appcfg-api-version': '1', 'Content-Type': 'application/octet-stream'} body=ELIDED
LOG 0 1512554362999779 _Authenticate configuring auth; needs_auth=False
LOG 0 1512554362999878 Sending request to http://MY-APP-ID-REMOVED.appspot.com/_ah/remote_api/ headers={'content-length': '4927', 'X-appcfg-api-version': '1', 'Content-Type': 'application/octet-stream'} body=ELIDED
LOG 0 1512554363000249 _Authenticate configuring auth; needs_auth=False
LOG 0 1512554363000314 Sending request to http://MY-APP-ID-REMOVED.appspot.com/_ah/remote_api/ headers={'content-length': '5347', 'X-appcfg-api-version': '1', 'Content-Type': 'application/octet-stream'} body=ELIDED
LOG 0 1512554363000702 _Authenticate configuring auth; needs_auth=False
LOG 0 1512554363000772 Sending request to http://MY-APP-ID-REMOVED.appspot.com/_ah/remote_api/ headers={'content-length': '5767', 'X-appcfg-api-version': '1', 'Content-Type': 'application/octet-stream'} body=ELIDED
LOG 0 1512554363001131 _Authenticate configuring auth; needs_auth=False
LOG 0 1512554363001195 Sending request to http://MY-APP-ID-REMOVED.appspot.com/_ah/remote_api/ headers={'content-length': '6187', 'X-appcfg-api-version': '1', 'Content-Type': 'application/octet-stream'} body=ELIDED
LOG 0 1512554363002944 _Authenticate configuring auth; needs_auth=False
LOG 0 1512554363003074 Sending request to http://MY-APP-ID-REMOVED.appspot.com/_ah/remote_api/ headers={'content-length': '6607', 'X-appcfg-api-version': '1', 'Content-Type': 'application/octet-stream'} body=ELIDED
LOG 0 1512554363003603 _Authenticate configuring auth; needs_auth=False
LOG 0 1512554363003699 Sending request to http://MY-APP-ID-REMOVED.appspot.com/_ah/remote_api/ headers={'content-length': '7027', 'X-appcfg-api-version': '1', 'Content-Type': 'application/octet-stream'} body=ELIDED
LOG 0 1512554363004131 _Authenticate configuring auth; needs_auth=False
LOG 0 1512554363004219 Sending request to http://MY-APP-ID-REMOVED.appspot.com/_ah/remote_api/ headers={'content-length': '7447', 'X-appcfg-api-version': '1', 'Content-Type': 'application/octet-stream'} body=ELIDED
LOG 0 1512554363004622 _Authenticate configuring auth; needs_auth=False
LOG 0 1512554363004724 Sending request to http://MY-APP-ID-REMOVED.appspot.com/_ah/remote_api/ headers={'content-length': '7867', 'X-appcfg-api-version': '1', 'Content-Type': 'application/octet-stream'} body=ELIDED
LOG 0 1512554363005139 _Authenticate configuring auth; needs_auth=False
LOG 0 1512554363005224 Sending request to http://MY-APP-ID-REMOVED.appspot.com/_ah/remote_api/ headers={'content-length': '8287', 'X-appcfg-api-version': '1', 'Content-Type': 'application/octet-stream'} body=ELIDED
LOG 0 1512554363005626 _Authenticate configuring auth; needs_auth=False
LOG 0 1512554363005712 Sending request to http://MY-APP-ID-REMOVED.appspot.com/_ah/remote_api/ headers={'content-length': '8707', 'X-appcfg-api-version': '1', 'Content-Type': 'application/octet-stream'} body=ELIDED
LOG 0 1512554363006224 _Authenticate configuring auth; needs_auth=False
LOG 0 1512554363006313 Sending request to http://MY-APP-ID-REMOVED.appspot.com/_ah/remote_api/ headers={'content-length': '9127', 'X-appcfg-api-version': '1', 'Content-Type': 'application/octet-stream'} body=ELIDED
LOG 0 1512554363006804 _Authenticate configuring auth; needs_auth=False
LOG 0 1512554363006881 Sending request to http://MY-APP-ID-REMOVED.appspot.com/_ah/remote_api/ headers={'content-length': '9547', 'X-appcfg-api-version': '1', 'Content-Type': 'application/octet-stream'} body=ELIDED
LOG 0 1512554363007264 _Authenticate configuring auth; needs_auth=False
LOG 0 1512554363007339 Sending request to http://MY-APP-ID-REMOVED.appspot.com/_ah/remote_api/ headers={'content-length': '9967', 'X-appcfg-api-version': '1', 'Content-Type': 'application/octet-stream'} body=ELIDED
LOG 0 1512554363007728 _Authenticate configuring auth; needs_auth=False
LOG 0 1512554363007884 Sending request to http://MY-APP-ID-REMOVED.appspot.com/_ah/remote_api/ headers={'content-length': '10387', 'X-appcfg-api-version': '1', 'Content-Type': 'application/octet-stream'} body=ELIDED
LOG 0 1512554363009860 _Authenticate configuring auth; needs_auth=False
LOG 0 1512554363010078 Sending request to http://MY-APP-ID-REMOVED.appspot.com/_ah/remote_api/ headers={'content-length': '10808', 'X-appcfg-api-version': '1', 'Content-Type': 'application/octet-stream'} body=ELIDED
LOG 0 1512554363010776 _Authenticate configuring auth; needs_auth=False
LOG 0 1512554363011154 Sending request to http://MY-APP-ID-REMOVED.appspot.com/_ah/remote_api/ headers={'content-length': '11229', 'X-appcfg-api-version': '1', 'Content-Type': 'application/octet-stream'} body=ELIDED
LOG 0 1512554363015068 _Authenticate configuring auth; needs_auth=False
LOG 0 1512554363015981 Sending request to http://MY-APP-ID-REMOVED.appspot.com/_ah/remote_api/ headers={'content-length': '11650', 'X-appcfg-api-version': '1', 'Content-Type': 'application/octet-stream'} body=ELIDED
LOG 0 1512554363019618 _Authenticate configuring auth; needs_auth=False
LOG 0 1512554363020373 Sending request to http://MY-APP-ID-REMOVED.appspot.com/_ah/remote_api/ headers={'content-length': '12071', 'X-appcfg-api-version': '1', 'Content-Type': 'application/octet-stream'} body=ELIDED
LOG 0 1512554363021747 _Authenticate configuring auth; needs_auth=False
LOG 0 1512554363021942 Sending request to http://MY-APP-ID-REMOVED.appspot.com/_ah/remote_api/ headers={'content-length': '12492', 'X-appcfg-api-version': '1', 'Content-Type': 'application/octet-stream'} body=ELIDED
LOG 0 1512554363022552 _Authenticate configuring auth; needs_auth=False
LOG 0 1512554363022640 Sending request to http://MY-APP-ID-REMOVED.appspot.com/_ah/remote_api/ headers={'content-length': '12913', 'X-appcfg-api-version': '1', 'Content-Type': 'application/octet-stream'} body=ELIDED
LOG 0 1512554363023076 _Authenticate configuring auth; needs_auth=False
LOG 0 1512554363023159 Sending request to http://MY-APP-ID-REMOVED.appspot.com/_ah/remote_api/ headers={'content-length': '13334', 'X-appcfg-api-version': '1', 'Content-Type': 'application/octet-stream'} body=ELIDED
LOG 0 1512554363023549 _Authenticate configuring auth; needs_auth=False
LOG 0 1512554363023628 Sending request to http://MY-APP-ID-REMOVED.appspot.com/_ah/remote_api/ headers={'content-length': '13755', 'X-appcfg-api-version': '1', 'Content-Type': 'application/octet-stream'} body=ELIDED
LOG 0 1512554363024033 _Authenticate configuring auth; needs_auth=False
LOG 0 1512554363024112 Sending request to http://MY-APP-ID-REMOVED.appspot.com/_ah/remote_api/ headers={'content-length': '14176', 'X-appcfg-api-version': '1', 'Content-Type': 'application/octet-stream'} body=ELIDED
LOG 0 1512554363024507 _Authenticate configuring auth; needs_auth=False
LOG 0 1512554363024638 Sending request to http://MY-APP-ID-REMOVED.appspot.com/_ah/remote_api/ headers={'content-length': '14597', 'X-appcfg-api-version': '1', 'Content-Type': 'application/octet-stream'} body=ELIDED
LOG 0 1512554363028736 _Authenticate configuring auth; needs_auth=False
LOG 0 1512554363029130 Sending request to http://MY-APP-ID-REMOVED.appspot.com/_ah/remote_api/ headers={'content-length': '15018', 'X-appcfg-api-version': '1', 'Content-Type': 'application/octet-stream'} body=ELIDED
LOG 0 1512554363029810 _Authenticate configuring auth; needs_auth=False
LOG 0 1512554363029902 Sending request to http://MY-APP-ID-REMOVED.appspot.com/_ah/remote_api/ headers={'content-length': '15439', 'X-appcfg-api-version': '1', 'Content-Type': 'application/octet-stream'} body=ELIDED
LOG 0 1512554363030329 _Authenticate configuring auth; needs_auth=False
LOG 0 1512554363030415 Sending request to http://MY-APP-ID-REMOVED.appspot.com/_ah/remote_api/ headers={'content-length': '15860', 'X-appcfg-api-version': '1', 'Content-Type': 'application/octet-stream'} body=ELIDED
LOG 0 1512554363030977 _Authenticate configuring auth; needs_auth=False
LOG 0 1512554363031066 Sending request to http://MY-APP-ID-REMOVED.appspot.com/_ah/remote_api/ headers={'content-length': '16281', 'X-appcfg-api-version': '1', 'Content-Type': 'application/octet-stream'} body=ELIDED
LOG 0 1512554363031481 _Authenticate configuring auth; needs_auth=False
LOG 0 1512554363031573 Sending request to http://MY-APP-ID-REMOVED.appspot.com/_ah/remote_api/ headers={'content-length': '16703', 'X-appcfg-api-version': '1', 'Content-Type': 'application/octet-stream'} body=ELIDED
LOG 0 1512554363032008 _Authenticate configuring auth; needs_auth=False
LOG 0 1512554363032089 Sending request to http://MY-APP-ID-REMOVED.appspot.com/_ah/remote_api/ headers={'content-length': '17126', 'X-appcfg-api-version': '1', 'Content-Type': 'application/octet-stream'} body=ELIDED
LOG 0 1512554363032572 _Authenticate configuring auth; needs_auth=False
LOG 0 1512554363032672 Sending request to http://MY-APP-ID-REMOVED.appspot.com/_ah/remote_api/ headers={'content-length': '17549', 'X-appcfg-api-version': '1', 'Content-Type': 'application/octet-stream'} body=ELIDED
LOG 0 1512554363033032 _Authenticate configuring auth; needs_auth=False
LOG 0 1512554363033096 Sending request to http://MY-APP-ID-REMOVED.appspot.com/_ah/remote_api/ headers={'content-length': '17972', 'X-appcfg-api-version': '1', 'Content-Type': 'application/octet-stream'} body=ELIDED
LOG 0 1512554363033394 _Authenticate configuring auth; needs_auth=False
LOG 0 1512554363033453 Sending request to http://MY-APP-ID-REMOVED.appspot.com/_ah/remote_api/ headers={'content-length': '18395', 'X-appcfg-api-version': '1', 'Content-Type': 'application/octet-stream'} body=ELIDED
LOG 0 1512554363033774 _Authenticate configuring auth; needs_auth=False
LOG 0 1512554363033834 Sending request to http://MY-APP-ID-REMOVED.appspot.com/_ah/remote_api/ headers={'content-length': '18818', 'X-appcfg-api-version': '1', 'Content-Type': 'application/octet-stream'} body=ELIDED
LOG 0 1512554363034173 _Authenticate configuring auth; needs_auth=False
LOG 0 1512554363034229 Sending request to http://MY-APP-ID-REMOVED.appspot.com/_ah/remote_api/ headers={'content-length': '19241', 'X-appcfg-api-version': '1', 'Content-Type': 'application/octet-stream'} body=ELIDED
LOG 0 1512554363034556 _Authenticate configuring auth; needs_auth=False
LOG 0 1512554363034619 Sending request to http://MY-APP-ID-REMOVED.appspot.com/_ah/remote_api/ headers={'content-length': '19664', 'X-appcfg-api-version': '1', 'Content-Type': 'application/octet-stream'} body=ELIDED
LOG 0 1512554363035010 _Authenticate configuring auth; needs_auth=False
LOG 0 1512554363035092 Sending request to http://MY-APP-ID-REMOVED.appspot.com/_ah/remote_api/ headers={'content-length': '20087', 'X-appcfg-api-version': '1', 'Content-Type': 'application/octet-stream'} body=ELIDED
LOG 0 1512554363035545 _Authenticate configuring auth; needs_auth=False
LOG 0 1512554363035605 Sending request to http://MY-APP-ID-REMOVED.appspot.com/_ah/remote_api/ headers={'content-length': '20510', 'X-appcfg-api-version': '1', 'Content-Type': 'application/octet-stream'} body=ELIDED
LOG 0 1512554363035985 _Authenticate configuring auth; needs_auth=False
LOG 0 1512554363036068 Sending request to http://MY-APP-ID-REMOVED.appspot.com/_ah/remote_api/ headers={'content-length': '20933', 'X-appcfg-api-version': '1', 'Content-Type': 'application/octet-stream'} body=ELIDED
LOG 0 1512554363036447 _Authenticate configuring auth; needs_auth=False
LOG 0 1512554363036533 Sending request to http://MY-APP-ID-REMOVED.appspot.com/_ah/remote_api/ headers={'content-length': '21356', 'X-appcfg-api-version': '1', 'Content-Type': 'application/octet-stream'} body=ELIDED
LOG 0 1512554363040271 _Authenticate configuring auth; needs_auth=False
LOG 0 1512554363040941 Sending request to http://MY-APP-ID-REMOVED.appspot.com/_ah/remote_api/ headers={'content-length': '21779', 'X-appcfg-api-version': '1', 'Content-Type': 'application/octet-stream'} body=ELIDED
LOG 0 1512554363043081 _Authenticate configuring auth; needs_auth=False
LOG 0 1512554363043818 Sending request to http://MY-APP-ID-REMOVED.appspot.com/_ah/remote_api/ headers={'content-length': '22202', 'X-appcfg-api-version': '1', 'Content-Type': 'application/octet-stream'} body=ELIDED
RuntimeError('maximum recursion depth exceeded',)
RuntimeError('maximum recursion depth exceeded',)
Traceback (most recent call last):
File "/home/fcaldas/google_appengine/lib/cherrypy/cherrypy/wsgiserver/wsgiserver2.py", line 1302, in communicate
req.respond()
File "/home/fcaldas/google_appengine/lib/cherrypy/cherrypy/wsgiserver/wsgiserver2.py", line 831, in respond
self.server.gateway(self).respond()
File "/home/fcaldas/google_appengine/lib/cherrypy/cherrypy/wsgiserver/wsgiserver2.py", line 2115, in respond
response = self.req.server.wsgi_app(self.env, self.start_response)
File "/home/fcaldas/google_appengine/google/appengine/tools/devappserver2/wsgi_server.py", line 287, in __call__
return app(environ, start_response)
File "/home/fcaldas/google_appengine/google/appengine/tools/devappserver2/request_rewriter.py",
...(Many lines later)...
File "/home/fcaldas/google_appengine/google/appengine/tools/appengine_rpc_httplib2.py", line 240, in Send
self._Authenticate(self.http, auth_errors[0] > 0)
File "/home/fcaldas/google_appengine/google/appengine/tools/appengine_rpc_httplib2.py", line 471, in _Authenticate
needs_auth)
File "/usr/lib64/python2.7/logging/__init__.py", line 1155, in debug
self._log(DEBUG, msg, args, **kwargs)
File "/usr/lib64/python2.7/logging/__init__.py", line 1285, in _log
record = self.makeRecord(self.name, level, fn, lno, msg, args, exc_info, func, extra)
File "/usr/lib64/python2.7/logging/__init__.py", line 1259, in makeRecord
rv = LogRecord(name, level, fn, lno, msg, args, exc_info, func)
File "/usr/lib64/python2.7/logging/__init__.py", line 263, in __init__
if (args and len(args) == 1 and isinstance(args[0], collections.Mapping)
File "/usr/lib64/python2.7/abc.py", line 132, in __instancecheck__
if subclass is not None and subclass in cls._abc_cache:
RuntimeError: maximum recursion depth exceeded