App Engine _ah login page not working locally
Whenever i click on the link created by users.create_login_url()
, i get an error (shown below). When deployed, the thing works, but doesn't work locally.
What is wrong?
Here's the code:
import random
import os
from google.appengine.api import users
from google.appengine.ext import webapp, db
from google.appengine.ext.webapp import util, template
from google.appengine.ext.webapp.util import run_wsgi_app
class MainHandler(webapp.RequestHandler):
def get(self):
url = users.create_login_url('/quote')
link = '<a href="%s">Login</a>' % url
self.response.out.write(link)
class QuoteHandler(webapp.RequestHandler):
def get(self):
self.response.out.write("Quote Handler!")
def new(self):
self.response.out.write("New quote")
def main():
application = webapp.WSGIApplication([(r'/quote/(.*)',QuoteHandler),('/', MainHandler)],
debug=True)
util.run_wsgi_app(application)
if __name__ == '__main__':
main()
And here's the error it gives me:
Traceback (most recent call last):
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 3211, in _HandleRequest
self._Dispatch(dispatcher, self.rf开发者_Go百科ile, outfile, env_dict)
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 3154, in _Dispatch
base_env_dict=env_dict)
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 527, in Dispatch
base_env_dict=base_env_dict)
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 2452, in Dispatch
CGIDispatcher.Dispatch(self, *args, **kwargs)
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 2404, in Dispatch
self._module_dict)
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 2441, in curried_exec_cgi
return ExecuteCGI(*args, **kwargs)
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 2312, in ExecuteCGI
logging.debug('Executing CGI with env:\n%s', pprint.pformat(env))
File "C:\Python27\lib\pprint.py", line 60, in pformat
return PrettyPrinter(indent=indent, width=width, depth=depth).pformat(object)
File "C:\Python27\lib\pprint.py", line 119, in pformat
self._format(object, sio, 0, 0, {}, 0)
File "C:\Python27\lib\pprint.py", line 137, in _format
rep = self._repr(object, context, level - 1)
File "C:\Python27\lib\pprint.py", line 230, in _repr
self._depth, level)
File "C:\Python27\lib\pprint.py", line 242, in format
return _safe_repr(object, context, maxlevels, level)
File "C:\Python27\lib\pprint.py", line 284, in _safe_repr
for k, v in _sorted(object.items()):
File "C:\Python27\lib\pprint.py", line 75, in _sorted
with warnings.catch_warnings():
File "C:\Python27\lib\warnings.py", line 327, in __init__
self._module = sys.modules['warnings'] if module is None else module
KeyError: 'warnings'
EDIT SDK Version: 1.3.8 Python: 2.7
You are using Python 2.7 that is not supported by Google App Engine (issue here).
You need to downgrade to Python 2.5 to make it work.
I fixed this problem on Fedora 14 w/ Python 2.7 by commenting out the following:
# logging.debug('Executing CGI with env:\n%s', pprint.pformat(env))
on line 2312
of dev_appserver.py
located at google_appengine_sdk_dir/google/appengine/tools
Here's the stack trace, where you can see line 2312
was causing the exception to be thrown:
Traceback (most recent call last):
File "/google_app_sdk/google/appengine/tools/dev_appserver.py", line 3211, in _HandleRequest
self._Dispatch(dispatcher, self.rfile, outfile, env_dict)
File "/google_app_sdk/google/appengine/tools/dev_appserver.py", line 3154, in _Dispatch
base_env_dict=env_dict)
File "/google_app_sdk/google/appengine/tools/dev_appserver.py", line 527, in Dispatch
base_env_dict=base_env_dict)
File "/google_app_sdk/google/appengine/tools/dev_appserver.py", line 2452, in Dispatch
CGIDispatcher.Dispatch(self, *args, **kwargs)
File "/google_app_sdk/google/appengine/tools/dev_appserver.py", line 2404, in Dispatch
self._module_dict)
File "/google_app_sdk/google/appengine/tools/dev_appserver.py", line 2441, in curried_exec_cgi
return ExecuteCGI(*args, **kwargs)
File "/google_app_sdk/google/appengine/tools/dev_appserver.py", line 2312, in ExecuteCGI
logging.debug('Executing CGI with env:\n%s', pprint.pformat(env))
File "/usr/lib64/python2.7/pprint.py", line 60, in pformat
return PrettyPrinter(indent=indent, width=width, depth=depth).pformat(object)
File "/usr/lib64/python2.7/pprint.py", line 119, in pformat
self._format(object, sio, 0, 0, {}, 0)
File "/usr/lib64/python2.7/pprint.py", line 137, in _format
rep = self._repr(object, context, level - 1)
File "/usr/lib64/python2.7/pprint.py", line 230, in _repr
self._depth, level)
File "/usr/lib64/python2.7/pprint.py", line 242, in format
return _safe_repr(object, context, maxlevels, level)
File "/usr/lib64/python2.7/pprint.py", line 284, in _safe_repr
for k, v in _sorted(object.items()):
File "/usr/lib64/python2.7/pprint.py", line 75, in _sorted
with warnings.catch_warnings():
File "/usr/lib64/python2.7/warnings.py", line 327, in __init__
self._module = sys.modules['warnings'] if module is None else module
KeyError: 'warnings'
Commenting out that one line seems to make everything work just fine, no other errors and I don't have to downgrade to Python 2.5.
I've seen this problem -- you're running the wrong version of Python locally.
Install Python 2.5 and ths problem should go away -- it did for me.
http://www.python.org/download/releases/2.5.5/
精彩评论