2012-01-21 19 views
5

Ho recentemente aggiornato la mia app GAE Python a Python 2.7. Da allora, ho periodicamente ottengo il seguente errore con il server dev e il server dev serve una pagina vuota:GAE Il server di sviluppo Python si interrompe in modo intermittente dopo l'aggiornamento a 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 - 

Alcune note:

  • questo non avviene sul server di produzione.
  • Sul server di sviluppo, la mia app funzionerà per alcuni minuti e quindi si verificherà questo errore.
  • Se interrompo e riavvio la mia app sul server di sviluppo, funzionerà di nuovo per alcuni minuti.
  • Sto usando l'ultima versione di gae-pytz e si può vedere che non riesce in un'importazione lì.
  • Il [...] che ho rimosso è simile a quello che vedete vicino alla fine.
  • Non so il motivo per cui setuptools viene richiamato alla fine.
  • Sto usando un Mac con Lion.

Posso usare il server di sviluppo, ma è davvero fastidioso fermarsi e riavviare ogni pochi minuti. Qualche idea su come risolvere questo problema?

+0

Ancora lo stesso problema con gli ultimi server Python e dev. –

risposta

1

Il problema reale dello stack trace è che il codice sta tentando di importare gli strumenti di configurazione dai pacchetti del sito, cosa che il server di sviluppo non eseguirà.

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

Sarà necessario includere setuptools in codice base dell'applicazione. Il fatto che funzioni a volte, suggerisce che i percorsi del codice attraverso vari moduli variano, e forse (a seconda di ciò che stai cercando) diversi ordini di importazione significano che gli strumenti di configurazione sono stati importati da qualche altra parte, o è richiesto solo in determinati punti del tuo codice .

Dai un'occhiata alla riga 4a riga della traccia di stack in cui pytz viene importata, la riga successiva proviene da pkg_resources import resource_stream che cosa sta causando il resto del problema di importazione. Io uso un falso pkg_resources troncato nella radice del mio progetto, che non finisce per cercare di importare cose dagli strumenti di configurazione. È possibile eseguire il server di sviluppo in modalità di importazione debug che ti dirà molto di più

Ecco un falso pkg_resources.

"""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 

Ci sono probabilmente altri/modi migliori per farlo, ma funziona per me.

Oh, vorrei anche suggerire di utilizzare http://code.google.com/p/gae-pytz/ anziché pytz.

Acclamazioni

+0

Hmmm ... Non sto usando setuptools nella mia app, quindi non so perché e dove viene importato. –

+0

Dai un'occhiata alla riga 4a riga della traccia stack in cui viene importato pytz, la riga successiva proviene da pkg_resources import resource_stream che cosa sta causando il resto del problema di importazione. Io uso un falso pkg_resources troncato nella radice del mio progetto, che non finisce per cercare di importare cose dagli strumenti di configurazione. Puoi eseguire il server di sviluppo in modalità di importazione debug che ti dirà molto di più. –

+0

Grazie! Questo sembra davvero utile. Sarebbe più semplice commentare "da pkg_resources import resource_stream" nel file '__init __. Py' per gae-pytz? –

0

Una risposta alternativa a quanto sopra che preferisco.

Il file __init__.py per pytz contiene le seguenti righe:

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

ho commentato le prime tre righe e che ha risolto il problema.

Problemi correlati