CherryPy3 與 IIS 6.0 整合

华科云商小雪發表於2024-03-14

當我們在程式設計的時候,要將CherryPy3與IIS 6.0整合,可以使用ISAPI_WSGI模組。ISAPI_WSGI是一個用於在IIS中執行WSGI應用程式的模組。首先要確保自己的伺服器上安裝了Python和CherryPy3。並且下載最新的ISAPI_WSGI模組。具體實際操作可以看看下文,這是我嘔心瀝血幾個通宵寫出來的程式碼。

1、問題背景

  • 在採用 CherryPy 框架的小型 Python Web 應用程式中,需要在 Windows 2003 和 IIS 6.0 環境下進行部署。

  • 儘管在 Ubuntu 伺服器上使用 mod_python 與 Apache 結合的方式成功執行了 CherryPy,但在 Windows 環境下遇到了困難。

  • 嘗試了各種解決方案,例如安裝 Python 2.6、CherryPy 3、ISAPI-WSGI 和 PyWin32,並閱讀了相關文件,但仍然無法成功執行應用程式。

2、解決方案

  • 首先需要了解在 IIS 中執行 ISAPI 應用程式的基本流程。

  • 可以嘗試先讓一個簡單的 Hello World WSGI 應用程式在 ISAPI_WSGI 下執行。

  • 接下來需要編寫一個鉤子指令碼,以便讓 IIS 可以載入 DLL,並建立一個 CherryPy WSGI 例項。

  • 最後,需要將指令碼放置在 inetpub\cherrypy 目錄中,並執行它,即可將其安裝到 IIS 網站的根目錄中。

  • 另外,需要在 config.py 檔案中新增以下配置:


cherrypy.
config.
update({

'tools.sessions.on': True
})
  • 完成上述步驟後,CherryPy 應用程式即可在 IIS 6.0 環境下正常執行。

以下程式碼示例展示瞭如何建立鉤子指令碼:


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()

透過上述解決方案,可以成功將 CherryPy 應用程式整合到 IIS 6.0 環境中,並使其正常執行。

根據上述的步驟,我們可以將CherryPy3應用程式與IIS 6.0整合,實現在IIS中執行CherryPy3應用程式的功能。但是這裡需要注意的是,IIS 6.0已經比較老舊,建議升級到更新的版本以獲得更好的效能和安全性。如有任何不懂的問題可以留言討論。


來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/70034537/viewspace-3008912/,如需轉載,請註明出處,否則將追究法律責任。

相關文章