2012-05-15 11 views
7

tengo este pedazo de código que se ejecuta a la perfección en el servidor local, pero arroja este error oscura en GAE:error de importación para el modelo del usuario

import_string() failed for 'webapp2_extras.appengine.auth.models.User' . Possible reasons are: - missing __init__.py in a package; - package or module

Mis declaraciones de importación:

from webapp2_extras import auth 
from webapp2_extras import sessions 
from webapp2_extras.auth import InvalidAuthIdError 
from webapp2_extras.auth import InvalidPasswordError 

Uso de modelo auth's usuario:

user = self.auth.store.user_model.create_user(username, password_raw = password, email = email) 
if not user[0]: #returns a tuple with [boolean, user_info] 
    return 'Create user error' 
else: 
    self.set_flash("Thank you for registering. Please login!") 
    self.redirect(self.auth_config['login_url']) 

Full code

ACTUALIZACIÓN (seguimiento de la pila completa)

import_string() failed for 'webapp2_extras.appengine.auth.models.User'. Possible reasons are: 

- missing __init__.py in a package; 
- package or module path not included in sys.path; 
- duplicated package or module name taking precedence in sys.path; 
- missing module, class, function or variable; 

Original exception: 

ImportError: No module named ndb 

Debugged import: 

- 'webapp2_extras' found in '/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2_extras/__init__.pyc'. 
- 'webapp2_extras.appengine' found in '/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2_extras/appengine/__init__.pyc'. 
- 'webapp2_extras.appengine.auth' found in '/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2_extras/appengine/auth/__init__.pyc'. 
- 'webapp2_extras.appengine.auth.models' not found. 
Traceback (most recent call last): 
    File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1511, in __call__ 
    rv = self.handle_exception(request, response, e) 
    File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1505, in __call__ 
    rv = self.router.dispatch(request, response) 
    File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1253, in default_dispatcher 
    return route.handler_adapter(request, response) 
    File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1077, in __call__ 
    return handler.dispatch() 
    File "/base/data/home/apps/s~webapp-auth/1.358936463581927371/main.py", line 34, in dispatch 
    response = super(BaseHandler, self).dispatch() 
    File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 547, in dispatch 
    return self.handle_exception(e, self.app.debug) 
    File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 545, in dispatch 
    return method(*args, **kwargs) 
    File "/base/data/home/apps/s~webapp-auth/1.358936463581927371/main.py", line 127, in post 
    user = self.auth.store.user_model.create_user(username, password_raw = password, email = email) 
    File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 701, in __get__ 
    value = self.func(obj) 
    File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2_extras/auth.py", line 131, in user_model 
    cls = self.config['user_model'] = webapp2.import_string(cls) 
    File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1824, in import_string 
    return getattr(__import__(module, None, None, [obj]), obj) 
    File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2_extras/appengine/auth/models.py", line 13, in <module> 
    from ndb import model 
+0

Puedes publicar una traza completa. –

Respuesta

12

un aspecto similar a este issue que ya estaba fijado por webapp 2.5.1

Asegúrese de importar la versión más reciente de webapp2, mediante la adición de los line a su archivo app.yaml:

libraries: 
- name: webapp2 
    version: latest 

Como solución alternativa se puede añadir las siguientes líneas a su aplicación:

import sys 
from google.appengine.ext import ndb 
sys.modules['ndb'] = ndb 
+0

Esto funciona como un encanto. Eres tan increíble. Muchas gracias xD – Prakhar

+4

Tenga en cuenta que 'version: latest' debe usarse con precaución, ya que se actualizará automáticamente a la última versión de la aplicación web. 'versión: 2.5.1' sería más seguro. – proppy

Cuestiones relacionadas