2012-01-21 10 views
5

Niedawno zaktualizowałem moją aplikację GAE Python do wersji Python 2.7. Od tego czasu, okresowo pojawia się następujący błąd z serwerem dev i serwer dev serwuje pustą stronę:Serwer deweloperski GAE Python awarie ulegają awarii po aktualizacji do wersji 2.7

Traceback (most recent call last): 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/runtime/wsgi.py", line 168, in Handle 
    handler = _config_handle.add_wsgi_middleware(self._LoadHandler()) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/runtime/wsgi.py", line 206, in _LoadHandler 
    handler = __import__(path[0]) 
    [...] 
    File "/Users/joneill/OpenSTV/OpenSTV/trunk/OpaVote-HR/main.py", line 2, in <module> 
    import views 
    [...] 
    File "/Users/joneill/OpenSTV/OpenSTV/trunk/OpaVote-HR/views.py", line 3, in <module> 
    from pytz.gae import pytz 
    [...] 
    File "/Users/joneill/OpenSTV/OpenSTV/trunk/OpaVote-HR/pytz/__init__.py", line 34, in <module> 
    from pkg_resources import resource_stream 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py", line 662, in Decorate 
    return func(self, *args, **kwargs) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py", line 1818, in load_module 
    return self.FindAndLoadModule(submodule, fullname, search_path) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py", line 662, in Decorate 
    return func(self, *args, **kwargs) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py", line 1690, in FindAndLoadModule 
    description) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py", line 662, in Decorate 
    return func(self, *args, **kwargs) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py", line 1615, in LoadModuleRestricted 
    return source_file.load_module(submodule_fullname) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/dist/py_zipimport.py", line 246, in load_module 
    submodname, is_package, fullpath, source = self._get_source(fullmodname) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/dist/py_zipimport.py", line 207, in _get_source 
    source = self.zipfile.read(relpath.replace(os.sep, '/')) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/zipfile.py", line 867, in read 
    return self.open(name, "r", pwd).read() 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/zipfile.py", line 882, in open 
    zef_file = open(self.filename, 'rb') 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py", line 578, in __init__ 
    raise IOError(errno.EACCES, 'file not accessible', filename) 
IOError: [Errno 13] file not accessible: '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg' 
INFO  2012-01-21 20:50:44,222 dev_appserver.py:2832] "POST /manage HTTP/1.1" 500 - 

Kilka uwag:

  • To nie zdarza się na serwerze produkcyjnym.
  • Na serwerze dev moja aplikacja będzie działać przez kilka minut, a następnie wystąpi ten błąd.
  • Jeśli zatrzymam i uruchomię ponownie aplikację na serwerze programisty, będzie działać ponownie przez kilka minut.
  • Używam najnowszej wersji gae-pytz i widzisz, że nie powiedzie się tam w imporcie.
  • [...] które usunąłem są podobne do rzeczy, które widzisz pod koniec.
  • Nie wiem, dlaczego setuptools jest wywoływany na końcu.
  • Używam Maca z Lwem.

Mogę używać serwera dev, ale denerwujące jest zatrzymywanie i restartowanie co kilka minut. Wszelkie pomysły, jak to naprawić?

+0

Ciągle występuje ten sam problem z najnowszym serwerem Python i dev. –

Odpowiedz

1

Rzeczywisty problem ze śledzenia stosu, czy twój kod próbuje importować narzędzia instalacyjne z pakietów site-packages, których serwer dev nie wykona.

'/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg'

Trzeba będzie obejmować setuptools w ty baza kodu aplikacji. Fakt, że działa on czasem, sugeruje, że ścieżki do kodu w różnych modułach są różne i być może (w zależności od tego, co robisz w dev) różne zamówienia importowe oznaczają, że narzędzia do konfiguracji zostały zaimportowane gdzie indziej lub są wymagane tylko w określonych punktach kodu .

Spójrz na linię czwartą linię śladu stosu, gdzie importowany jest pytz, następny wiersz pochodzi z pkg_resources import resource_stream To jest to, co wywołuje resztę problemu z importowaniem. Używam fałszywego skróconego pkg_resources w katalogu głównym mojego projektu, który nie kończy się na próbie importowania rzeczy z narzędzi konfiguracyjnych. Możesz uruchomić serwer dev w trybie importowania debugowania, który powie ci o wiele więcej. To jest fałszywe źródło_pkg.

"""Package resource API 
-------------------- 

A resource is a logical file contained within a package, or a logical 
subdirectory thereof. The package resource API expects resource names 
to have their path parts separated with ``/``, *not* whatever the local 
path separator is. Do not use os.path operations to manipulate resource 
names being passed into the API. 

The package resource API is designed to work with normal filesystem packages, 
.egg files, and unpacked .egg files. It can also work in a limited way with 
.zip files and with custom PEP 302 loaders that support the ``get_data()`` 
method. 
""" 

import sys, os, zipimport, time, re, imp, new 

try: 
    frozenset 
except NameError: 
    from sets import ImmutableSet as frozenset 

from os import utime #, rename, unlink # capture these to bypass sandboxing 
from os import open as os_open 

Są prawdopodobnie inne/lepsze sposoby robienia tego, ale to działa dla mnie.

Och, proponuję również użyć http://code.google.com/p/gae-pytz/ zamiast pytz.

Pozdrowienia

+0

Hmmm ... Nie używam setuptools w mojej aplikacji, więc nie wiem, dlaczego i gdzie jest ona importowana. –

+0

Spójrz na linię 4. wiersza śledzenia stosu, gdzie importowany jest pytz, następny wiersz pochodzi z pkg_resources import resource_stream, który wywołuje resztę problemu z importowaniem. Używam fałszywego skróconego pkg_resources w katalogu głównym mojego projektu, który nie kończy się na próbie importowania rzeczy z narzędzi konfiguracyjnych. Możesz uruchomić serwer dev w trybie importu debugowania, który powie Ci znacznie więcej. –

+0

Dzięki! To wygląda na bardzo pomocne. Czy łatwiej byłoby po prostu skomentować 'from pkg_resources import resource_stream' w pliku' __init __. Py' dla gae-pytz? –

0

Alternatywna odpowiedź na powyższe pytanie, którą preferuję.

Plik __init__.py dla pytz zawiera następujące wiersze:

#try: 
# from pkg_resources import resource_stream 
#except ImportError: 
resource_stream = None 

I wykomentowane pierwszych trzech linii i że problem został rozwiązany.

Powiązane problemy