2009-11-05 4 views
4

Cherrypy 프레임 워크를 사용하는 작은 Python 웹 응용 프로그램이 있습니다. 나는 결코 웹 서버의 전문가는 아니다.CherryPy3 및 IIS 6.0

나는 우분투 서버에서 mod_python을 사용하여 아파치와 함께 Cherrypy를 사용하고있다. 그러나 이번에는 Windows 2003과 IIS 6.0을 사용하여 내 사이트를 호스팅해야합니다.

이 사이트는 독립 실행 형 서버로 완벽하게 실행됩니다. IIS를 실행하는 데는 별 도움이되지 않습니다. 나는 지난 날 인터넷 검색을하고 맹목적으로이 모든 것을 실행하기 위해 노력했다.

저는 웹 사이트에서 (Python 2.6, CherrpyPy 3, ISAPI-WSGI, PyWin32) 말한 모든 도구를 설치하고 가능한 모든 설명서를 읽었습니다. 이 블로그는 가장 도움이되었다 :

http://whatschrisdoing.com/blog/2008/07/10/turbogears-isapi-wsgi-iis/

그러나 나는 아직도 내가 내 사이트를 실행하는 데 필요한 무엇으로 손실입니다. 나는 철저한 예제 나 방법을 찾을 수 없다. 여기있는 누군가가 도울 수 있기를 바랍니다.

건배.

+0

cherrypy가 작동 할 때 * 아파치, 아파치와의 충돌을 피하기 위해 다른 포트 (예 : 8080)에 바인드해야 했습니까? 아니면 좀 더 미묘한 것이 었습니까? cherrypy가 독립 실행 형 웹 사이트를 수행 할 수 있고 * 아파치가 필요하지 않기 때문에 요청합니다. – pavium

+0

아파치의 포트 80에 연결했습니다. 독립 실행 형 Cherrypy 호스트가 원하는 경우 80 번 포트 (또는 다른 포트)에서 수신 대기하도록 설정할 수 있습니다. – hsimah

+0

포트 번호는 중요하지 않습니다. ISAPI-wsgi를 사용할 때 WSGI 응용 프로그램은 웹 서버 프로세스 (DLL에 의해로드 됨)에서 기본적으로 호출되므로 관련 포트 번호는 IIS에서 구성된 포트 번호입니다. –

답변

2

좋아요, 제대로 작동합니다. 제이슨과 그의 도움 덕분에. 전화해야했습니다

[/] 아래의 설정 파일에이 내용이 있습니다. 그러나 그 이유는 싫어서입니다.이제는 내 웹 응용 프로그램을 설치하고 실행할 수 있습니다. 그런 다음 구성 업데이트가 필요하고 구성 파일이 마음에 들지 않는 이유를 해결하려고합니다.

10

IIS 사이트 뒤에서 CherryPy를 실행합니다. 작동 시키려면 몇 가지 트릭이 있습니다.

  1. IIS 작업자 프로세스 ID로 실행하는 경우 사용자 프로세스에서 사이트를 실행할 때와 동일한 사용 권한을 갖지 않습니다. 상황이 깨질 것입니다. 특히, 파일 시스템에 쓰고 자하는 모든 것은 아마도 약간의 조정 없이는 작동하지 않을 것입니다.
  2. setuptools를 사용하는 경우 구성 요소를 -Z 옵션 (모든 달걀을 압축 해제)과 함께 설치하고자 할 수 있습니다.
  3. win32traceutil을 사용하여 문제를 추적하십시오. win32traceutil을 가져 오는 후크 스크립트에 있는지 확인하십시오. 그런 다음 웹 사이트에 액세스하려고 할 때 문제가 발생하면 표준 출력으로 인쇄되는지 추적 유틸리티에 기록됩니다. 'python -m win32traceutil'을 사용하여 추적 결과를 확인하십시오.

ISAPI 응용 프로그램을 실행하려면 기본 프로세스를 이해해야합니다. 먼저 ISAPI_WSGI에서 실행되는 안녕하세요 - 세계 WSGI 응용 프로그램을 얻는 것이 좋습니다. 다음은 CherryPy가 내 웹 서버와 함께 작동하는지 확인하는 데 사용한 후크 스크립트의 초기 버전입니다.

#!python 

""" 
Things to remember: 
easy_install munges permissions on zip eggs. 
anything that's installed in a user folder (i.e. setup develop) will probably not work. 
There may still exist an issue with static files. 
""" 


import sys 
import os 
import isapi_wsgi 

# change this to '/myapp' to have the site installed to only a virtual 
# directory of the site. 
site_root = '/' 

if hasattr(sys, "isapidllhandle"): 
    import win32traceutil 

appdir = os.path.dirname(__file__) 
egg_cache = os.path.join(appdir, 'egg-tmp') 
if not os.path.exists(egg_cache): 
    os.makedirs(egg_cache) 
os.environ['PYTHON_EGG_CACHE'] = egg_cache 
os.chdir(appdir) 

import cherrypy 
import traceback 

class Root(object): 
    @cherrypy.expose 
    def index(self): 
     return 'Hai Werld' 

def setup_application(): 
    print "starting cherrypy application server" 
    #app_root = os.path.dirname(__file__) 
    #sys.path.append(app_root) 
    app = cherrypy.tree.mount(Root(), site_root) 
    print "successfully set up the application" 
    return app 

def __ExtensionFactory__(): 
    "The entry point for when the ISAPIDLL is triggered" 
    try: 
     # import the wsgi app creator 
     app = setup_application() 
     return isapi_wsgi.ISAPISimpleHandler(app) 
    except: 
     import traceback 
     traceback.print_exc() 
     f = open(os.path.join(appdir, 'critical error.txt'), 'w') 
     traceback.print_exc(file=f) 
     f.close() 

def install_virtual_dir(): 
    import isapi.install 
    params = isapi.install.ISAPIParameters() 
    # Setup the virtual directories - this is a list of directories our 
    # extension uses - in this case only 1. 
    # Each extension has a "script map" - this is the mapping of ISAPI 
    # extensions. 
    sm = [ 
     isapi.install.ScriptMapParams(Extension="*", Flags=0) 
    ] 
    vd = isapi.install.VirtualDirParameters(
     Server="CherryPy Web Server", 
     Name=site_root, 
     Description = "CherryPy Application", 
     ScriptMaps = sm, 
     ScriptMapUpdate = "end", 
     ) 
    params.VirtualDirs = [vd] 
    isapi.install.HandleCommandLine(params) 

if __name__=='__main__': 
    # If run from the command-line, install ourselves. 
    install_virtual_dir() 

이 스크립트는 몇 가지 작업을 수행합니다. ISAPI 핸들러에서 사용하는 CherryPy WSGI 인스턴스를 생성합니다 (setup_application()). IIS가 [ ].

\ inetpub \ cherrypy 디렉터리에이 파일을 저장 한 후 실행하면 "CherryPy Web Server"라는 IIS 웹 사이트의 루트에 자신을 설치하려고 시도합니다.

이 모든 것을 다른 모듈로 리팩터드 한 production web site code을 사용해 주셔서 감사합니다.

+0

안녕 Jason, 답장을 보내 주셔서 감사합니다. 금요일에 사이트를 운영해야했기 때문에 CherryPy를 사용하는 프로세스로 실행되고 있습니다. 오늘 나중에 귀하의 도움말을 시험해 보겠습니다. 시행 착오를 많이 사용하여 (다소) Hello World를 얻었습니다. 어떻게 진행되는지 알려줄 것입니다. – hsimah

+0

좋아요, 그래서 여기에 당신의 예제를 사용해 보았습니다. 그리고 저는 제 자신의 HelloWorld와 같은 문제를 겪었습니다. 내 IIS 구성이 내 파이썬이 아니라 문제라고 생각합니다. HelloWorld를 실행하려고하면 로 끝나는 긴 추적에 오류가 발생합니다. 그러나 가상 디렉터리로 설치할 수는 있습니다 (Name 매개 변수 변경). VD와 같은 이름의 노출 된 메서드가 없다면 CherryPy 서브 쿼리 404가 발생합니다. 초보자가 싫지만 처음부터 IIS 사이트를 설정하는 방법에 대해 알려줄 수 있습니까? – hsimah

+0

isapi-wsgi 0.4.1을 다시 확인하십시오. IIS 사이트 개체에서/ROOT의 경우와 관련하여 특정 웹 사이트가 올바르게 검색되지 않는 경우 0.4에 문제가있었습니다. –

관련 문제