2012-01-21 2 views
5

최근 GAE Python 응용 프로그램을 Python 2.7로 업그레이드했습니다. 그 이후로, 나는 정기적으로 dev에 서버에 다음과 같은 오류를 얻을 dev에 서버가 빈 페이지를 제공합니다 :GAE Python dev 서버가 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 - 

일부 노트 :

  • 이것은 프로덕션 서버에서 발생하지 않습니다.
  • dev 서버에서 내 앱이 몇 분 동안 작동 한 다음이 오류가 발생합니다.
  • dev 서버에서 내 앱을 중지했다가 다시 시작하면 몇 분 동안 다시 작동합니다.
  • gae-pytz의 최신 버전을 사용하고 있으며 가져 오기가 실패한 것을 확인할 수 있습니다.
  • 내가 제거한 [...]은 끝 부분 가까이에있는 것들과 비슷합니다.
  • 왜 setuptools가 마지막에 호출되는지 알 수 없습니다.
  • 나는 사자와 함께 Mac을 사용하고 있습니다.

dev 서버를 사용할 수는 있지만 몇 분 간격으로 중지했다가 다시 시작하는 것은 정말 짜증나게합니다. 어떤 아이디어가 이것을 고치는 방법?

+0

최신 Python 및 dev 서버에서 여전히 동일한 문제가 발생합니다. –

답변

1

스택 추적의 실제 문제는 코드가 dev-server가 수행하지 않는 site-packages에서 설정 도구를 가져 오려고하는 것입니다.

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

당신이 setuptools에 포함해야합니다 당신은 응용 프로그램 코드 기반. 여러 가지 모듈을 통해 경로를 코딩하는 것은 다르다는 것을 알 수 있습니다. 다른 import 명령을 사용하면 설치 도구가 다른 곳으로 가져 왔거나 코드의 특정 지점에서만 필요하다는 것을 의미 할 수 있습니다. .

pytz를 가져 오는 스택 추적의 4 번째 줄을 살펴보면 다음 줄은 pkg_resources에서 가져옵니다. import resource_stream thats는 나머지 가져 오기 문제를 트리거합니다. 필자는 프로젝트의 루트에서 가짜 잘린 pkg_resources를 사용합니다. 결국 설치 도구에서 가져 오기를 시도하지 않습니다. 디버그 가져 오기 모드에서 dev 서버를 실행하면 더 많은 것을 알 수 있습니다.

여기 가짜 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 

이 작업을 수행하는 데는 다른 방법이 있지만 나에게 도움이 될 수 있습니다.

아, 또한 pytz 대신 http://code.google.com/p/gae-pytz/을 사용하는 것이 좋습니다.

환호

+0

흠 ... 내 앱에서 setuptools를 사용하지 않아서 이유와 위치를 알 수 없습니다. –

+0

pytz를 가져온 스택 추적의 4 번째 줄을 살펴보면 다음 줄은 pkg_resources에서 가져옵니다. import resource_stream thats는 나머지 가져 오기 문제를 트리거합니다. 필자는 프로젝트의 루트에서 가짜 잘린 pkg_resources를 사용합니다. 결국 설치 도구에서 가져 오기를 시도하지 않습니다. 디버그 가져 오기 모드에서 dev 서버를 실행하면 더 많은 정보를 얻을 수 있습니다. –

+0

감사! 이것은 정말로 도움이 된 것처럼 보입니다. gae-pytz의'__init __. py' 파일에서'pkg_resources import resource_stream'을 주석 처리하는 것이 더 쉬울까요? –

0

나는 위의 답변을 선호합니다.

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

는 내가 처음 세 줄에서 주석과 그 문제를 해결 :

pytz의 __init__.py 파일은 다음 줄이 포함되어 있습니다.

관련 문제