2011-09-19 102 views
0

我被困住,绝望。在多个域上运行的多个python web应用程序(虚拟主机)?

是否有可能在cherrypy上使用虚拟主机在多个不同的域上提供多个python web应用程序?等等......我会回答自己:是的,这是可能的。有了虚拟主机调度程序,有可能,直到我需要这个:

我需要使用更多的同一应用程序的实例,但在不同的版本。这意味着我需要以某种方式拆分这些应用程序的python import的命名空间。

例如: 我有应用程序MyApp,它有两个版本。我有两个域app1.comapp2.com。 当我访问app1.com我想获得1。当我访问app2.com版本的应用程序MyApp,它应该是MyApp版本2

我现在用的cherrypy 3.2VirtualHostDispatcher,问题是,当我使用从MyApp版本1和MyApp版本2的方法导入,之前已经加载,python将使用已经导入的模块(由于模块缓存)。

是..它可以包装的进口和清洁Python模块缓存每次(我用这个顶级应用程序对象实例化),但它似乎对我挺不干净。我想,这是也效率低下...

那么,你有什么建议我? 我正在考虑使用mod_WSGI使用apache2和cherrypy,但似乎这并没有解决import问题,因为所有应用程序仍有一个python进程。

也许,我正在考虑完全错误的整个问题,我需要重新考虑它。我为每个想法或小费而开放。唯一的限制是我想使用Python 3.还有其他的东西仍然是开放的讨论:-)

谢谢你的每一个回应!

回答

1

阿帕奇/ mod_wsgi的能做的,就是需要什么。 mod_wsgi下的每个挂载的web应用程序都将在同一个进程中运行在不同的子解释器中,因此可以使用不同的代码库。更好的是,您使用mod_wsgi的守护进程模式并将每个Web应用程序委派给不同的进程,以避免它们相互干扰。

+0

谢谢。我还在想那个WSGI ......但从未给过机会。皮蒂,因为这正是我需要的!我只会阅读一些手册:-)谢谢! – JoshuaBoshi

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

也可以修改sys.path: import sys sys.path.insert(0,'/ path-to-myapp1 /') – rslnx

+0

您错过了我的问题。使用包含版本号的标识符维护应用程序源代码是不可能的。如果没有数字'myapp1','myapp2',您的示例将不起作用。但谢谢,格雷厄姆杜姆普顿先生已经回答:-) – JoshuaBoshi

相关问题