CherryPy3 與 IIS 6.0 整合
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 環境中,並使其正常執行。
來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/70034537/viewspace-3008912/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- CVE-2017-7269 IIS6.0遠端程式碼執行漏洞復現
- IIS Express介紹與使用Express
- IIS短檔名漏洞原理與挖掘思路
- Spring與ActiveMQ整合SpringMQ
- spring與redis整合SpringRedis
- Storm與kafka整合ORMKafka
- Mybatis與Spring整合MyBatisSpring
- Prometheus 與 Grafana 整合PrometheusGrafana
- ThinkPHP 6.0 管道模式與中介軟體的實現分析PHP模式
- Spring AI與大模型Ollama如何整合整合?SpringAI大模型
- IIS-MIME
- IIS Express 概述Express
- Docsify部署IIS
- Windows2000/2003/2008伺服器IIS匯入伺服器證書的方法(IIS5、IIS6、IIS7)Windows伺服器
- fastlane 的整合與使用AST
- 【Gerrit】Gerrit與Jenkins整合Jenkins
- ElasticSearch與Spring Boot整合ElasticsearchSpring Boot
- CircleCI 與持續整合
- Cassandra與Kafka的整合Kafka
- Visual Basic 6.0(VB6.0)詳細安裝過程
- 攀巖時代:HMS Core 6.0與移動開發之路移動開發
- SMBJ6.0A-ASEMI瞬態抑制二極體SMBJ6.0A
- PowerShell安裝IIS
- IIS WebDAV安全配置Web
- vue部署到iisVue
- vc++6.0與新版編譯器多了哪些注意事項(1)C++編譯
- Solr與Spring Boot整合 - ViithiisysSolrSpring Boot
- storm(1.1.3)與kafka(1.0.0)整合ORMKafka
- spring:spring與mybatis的整合SpringMyBatis
- Apache Hudi與Apache Flink整合Apache
- ThinkPHP與UCenter整合詳解PHP
- python django與celery的整合PythonDjango
- Struts2【與Spring整合】Spring
- Spring Cache與Ehcache 3整合Spring
- KubeSphere 與 Jenkins 的整合解析Jenkins
- 將 Zeek 與 ELK 棧整合
- Spring與Web環境整合SpringWeb
- 整合學習-偏差與方差