Несколько веб-приложений на Python, работающих на нескольких доменах (virtualhost)? - PullRequest
0 голосов
/ 19 сентября 2011

Я застрял и отчаялся.

Можно ли обслуживать несколько веб-приложений на Python в нескольких разных доменах, используя virtualhost на cherrypy?Хм, подождите ... Я отвечу себе: да, это возможно.С диспетчером виртуальных хостов это возможно, пока мне не потребуется:

Мне нужно использовать больше экземпляров одного и того же приложения, но в разных версиях.Это означает, что мне нужно как-то разделить пространство имен для python import для этих приложений.

Пример: у меня есть приложение MyApp, и есть две версии.У меня есть два домена app1.com и app2.com.Когда я получаю доступ к app1.com, я хотел бы получить приложение MyApp в версии 1. Когда я получаю доступ к app2.com, оно должно быть MyApp в версии 2.

Я сейчас использую VirtualHostDispatcher из cherrypy 3.2, и проблема в том, что когда я использую импорт из методов MyApp версии 1 и MyApp версии 2, загруженных ранее, python будет использовать уже импортированный модуль (из-за кеша модуля).

Да .. можно импортировать и очищать кэш модуля Python каждый раз (я использую это для создания экземпляров объекта приложения верхнего уровня), но это кажется мне довольно нечистым ... И я думаю, чтоэто также неэффективно ...

Итак, что вы мне порекомендуете?Я думал об использовании apache2 и cherrypy с использованием Mod_WSGI, но кажется, что это не решает проблему import, потому что есть еще один процесс python для всех приложений togetger.

Может быть, я думаю оВся проблема совершенно неверна, и мне нужно будет ее переосмыслить.Я открыт для каждой идеи или совета.Единственное ограничение - я хочу использовать Python 3. Все остальное еще открыто для обсуждения: -)

Спасибо за каждый ответ!

Ответы [ 2 ]

1 голос
/ 19 сентября 2011

Apache / mod_wsgi может делать то, что требуется.Каждое смонтированное веб-приложение в mod_wsgi будет запускаться в отдельном подчиненном интерпретаторе в одном и том же процессе, поэтому может использовать разные базы кода.Более того, вы используете режим демона mod_wsgi и делегируете каждое веб-приложение в отдельный процесс, поэтому не рискуете, что они будут мешать друг другу.

0 голосов
/ 19 сентября 2011

как насчет создания модуля 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()
...