我陷入困境和绝望。
是否可以在cherrypy上使用virtualhost在多个不同的域上提供多个python Web应用程序?嗯等等......我会回答自己:是的,这是可能的。使用虚拟主机调度程序是可能的,直到我需要:
我需要使用相同应用程序的更多实例,但版本不同。这意味着我需要以某种方式为这些应用程序拆分python import
的命名空间。
实施例:
我有应用程序MyApp
,它有两个版本。我有两个域app1.com
和app2.com
。
当我访问app1.com
时,我希望在版本1中获取应用MyApp
。当我访问app2.com
时,它应该是版本2中的MyApp
。
我现在正在使用VirtualHostDispatcher
的{{1}},问题在于,当我使用cherrypy 3.2
版本1的方法导入时,MyApp
版本2具有之前加载过,python将使用已导入的模块(因为模块缓存)。
是的..每次都可以包装导入并清理python模块缓存(我将它用于顶级应用程序对象实例化),但对我来说它似乎非常不洁净...而且我认为它也是低效...
那么,你推荐我什么?
我正在考虑使用mod_WSGI来使用apache2和cherrypy,但似乎这并没有解决MyApp
问题,因为所有应用程序仍然存在一个python进程。
也许,我正在考虑整个问题完全错误,我需要重新考虑一下。我为每个想法或小费打开了。唯一的限制是我想使用Python 3.其他任何东西仍然可供讨论: - )
感谢您的每一个回复!
答案 0 :(得分:1)
Apache / mod_wsgi可以执行所需的操作。 mod_wsgi下的每个安装的Web应用程序将在同一进程中的不同子解释器中运行,因此可以使用不同的代码库。更好的是,您使用mod_wsgi的守护进程模式并将每个Web应用程序委托给不同的进程,因此不会有相互干扰的风险。
答案 1 :(得分:0)
如何创建像这样做的myapp_selector模块:
def application(env, start_response):
import myapp1
import myapp2
if env['SERVER_NAME'] == 'myapp1.com':
myapp = myapp1
elif env['SERVER_NAME'] == 'myapp2.com':
myapp = myapp2
# ...
return myapp.process_request()