2015-07-24 3 views
1

Я развернул один простой проект в Google App Engine и там работает проект. Прежде чем я смог получить список пользователей из хранилища данных через удаленную консоль API, но теперь это больше не работает. Для запуска удаленной консоли API я соединяющую этот путь (работает от директории проекта):«Работа вне контекста приложения» в Google App Engine с удаленным API Python

../../+/google_appengine_PYTHON_SDK/remote_api_shell.py -s project.appspot.com 

Я обнаружил, что самый простой способ загрузки всех модулей является запуск:

s~project> help() 
help>modules 
help>quit 

После этого Я стараюсь, чтобы получить список пользователей:

s~project> from app.models import User 
s~project> User.query().fetch() 

результатов Последних строк в этом:

WARNING:root:suspended generator _run_to_list(query.py:964) raised RuntimeError(working outside of application context) 
Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
    File "/home/krasen/Programs/+/google_appengine_PYTHON_SDK/google/appengine/ext/ndb/utils.py", line 142, in positional_wrapper 
    return wrapped(*args, **kwds) 
    File "/home/krasen/Programs/+/google_appengine_PYTHON_SDK/google/appengine/ext/ndb/query.py", line 1187, in fetch 
    return self.fetch_async(limit, **q_options).get_result() 
    File "/home/krasen/Programs/+/google_appengine_PYTHON_SDK/google/appengine/ext/ndb/tasklets.py", line 325, in get_result 
    self.check_success() 
    File "/home/krasen/Programs/+/google_appengine_PYTHON_SDK/google/appengine/ext/ndb/tasklets.py", line 368, in _help_tasklet_along 
    value = gen.throw(exc.__class__, exc, tb) 
    File "/home/krasen/Programs/+/google_appengine_PYTHON_SDK/google/appengine/ext/ndb/query.py", line 964, in _run_to_list 
    batch = yield rpc 
    File "/home/krasen/Programs/+/google_appengine_PYTHON_SDK/google/appengine/ext/ndb/tasklets.py", line 454, in _on_rpc_completion 
    result = rpc.get_result() 
    File "/home/krasen/Programs/+/google_appengine_PYTHON_SDK/google/appengine/api/apiproxy_stub_map.py", line 613, in get_result 
    return self.__get_result_hook(self) 
    File "/home/krasen/Programs/+/google_appengine_PYTHON_SDK/google/appengine/datastore/datastore_query.py", line 3014, in __query_result_hook 
    self.__results = self._process_results(query_result.result_list()) 
    File "/home/krasen/Programs/+/google_appengine_PYTHON_SDK/google/appengine/datastore/datastore_query.py", line 3047, in _process_results 
    for result in results] 
    File "/home/krasen/Programs/+/google_appengine_PYTHON_SDK/google/appengine/datastore/datastore_rpc.py", line 185, in pb_to_query_result 
    return self.pb_to_entity(pb) 
    File "/home/krasen/Programs/+/google_appengine_PYTHON_SDK/google/appengine/ext/ndb/model.py", line 662, in pb_to_entity 
    entity = modelclass._from_pb(pb, key=key, set_key=False) 
    File "/home/krasen/Programs/+/google_appengine_PYTHON_SDK/google/appengine/ext/ndb/model.py", line 3119, in _from_pb 
    ent = cls() 
    File "app/models.py", line 68, in __init__ 
    if self.email == current_app.config['MAIL_ADMIN']: 
    File "/home/krasen/Programs/workspacePycharm/0010_1user_profile/venv/local/lib/python2.7/site-packages/werkzeug/local.py", line 338, in __getattr__ 
    return getattr(self._get_current_object(), name) 
    File "/home/krasen/Programs/workspacePycharm/0010_1user_profile/venv/local/lib/python2.7/site-packages/werkzeug/local.py", line 297, in _get_current_object 
    return self.__local() 
    File "/home/krasen/Programs/workspacePycharm/0010_1user_profile/venv/local/lib/python2.7/site-packages/flask/globals.py", line 34, in _find_app 
    raise RuntimeError('working outside of application context') 
RuntimeError: working outside of application context 

Я очень новичок в python. Я нашел http://kronosapiens.github.io/blog/2014/08/14/understanding-contexts-in-flask.html, но не мог понять, как начать работать в контексте приложения.

Я пытался на Linux с питона версии:

  • 2.7.6 (на чистой установленной Linux)
  • 2.7.9

Я попытался с Google версии App Engine SDK:

  • 1.9.17
  • 1.9.23
  • 1.9.24
+0

Какую версию SDK вы используете? Вы можете использовать [последнюю версию SDK] (https://cloud.google.com/appengine/downloads#Google_App_Engine_SDK_for_Python)? – Nick

+0

1.9.17, 1.9.23, 1.9.24 (последний). Все не работают. Я думаю, что это не из SDK python, потому что месяц назад он работал с 1.9.17 – makkasi

+0

Может быть, это не связано, но я обновил linux kubuntu до плазмы 5.2 и, возможно, появились новые пакеты для python. – makkasi

ответ

0

Проблема была в самом классе пользователя. Там у меня есть:

def __init__(self, **kwargs): 
     super(User, self).__init__(**kwargs) 
     # FLASKY_ADMIN configuration variable, so as soon as that email address appears in a registration request it can be given the correct role 
     if self.role is None: 
      print ("there is no role for this user") 
      if self.email == current_app.config['MAIL_ADMIN']: 
       self.role = ndb.Key('Role', 'administrator') 

проблемная линия эта линия:

if self.email == current_app.config['MAIL_ADMIN']: 

Я не знаю, как управлять, чтобы заставить его работать с этой линии, поэтому я удалил его и теперь пользователь извлекается.

+1

Как вы решили, ваша проблема создала новую, поскольку ваш исходный код теперь имеет учетные данные администратора. Для решения см. Подробности на 'с app.app_context()' здесь: http://stackoverflow.com/a/31444175 – matt

+0

OK это старый, и теперь я должен сказать, что настоящая проблема заключается в том, как Flask делает доступ к некоторым вещам, и как без контекста флэшка эти вещи не могут быть доступны. Я забыл об этой проблеме, и ссылка, приведенная выше, является правильным взглядом. спасибо – makkasi

 Смежные вопросы

  • Нет связанных вопросов^_^