cherrypy и относительный путь в приложении WSGI

запуск cherrypy с mod_wsgi на apache вместе с другим приложением php. Приложение cherrypy НЕ монтируется с корнем, а скорее с чем-то вроде «localhost/apps/myapp» через WSGIScriptAlias ​​в файле конфигурации apache.

В testapp.py я пробовал следующее, и когда я пытаюсь получить доступ к localhost/apps/myapp в браузере:

app = cherrypy.tree.mount(MyApp(), '', 'settings.config') #FAILS WITH 404

и

app = cherrypy.tree.mount(MyApp(), '/apps/myapp', 'settings.config') # WORKS

Первый случай терпит неудачу, потому что Cherpy ожидает, что он будет в корне сервера, а не относительно того, где он смонтирован через WSGI в apache.

Есть ли предпочтительный способ заставить приложения Cherpy работать относительно пути, который они монтируют в apache под WSGIScriptAlias?

По сути, я буду запускать несколько приложений Cherpy по нескольким разным путям и предпочел бы, чтобы Apache обрабатывал диспетчеризацию (т. Е. Cherrypy просто запускает приложение и не беспокоится об относительном пути). Таким образом, я могу избежать обновления нескольких разных файлов / файлов конфигурации Python каждый раз, когда некоторые относительные пути на сервере меняются.

Какие-либо предложения?

кстати, приложение cherrypy в настоящее время передается в приложение wsgi следующим образом:

app = cherrypy.tree.mount(HelloWorld(), '', 'settings.config')
return app(environ, start_response)

person Bill Zimmerman    schedule 09.11.2010    source источник


Ответы (2)


Я делаю это, хотя для этого потребуется, чтобы Cherpy знал относительный путь:

class Dir: pass
root = Dir()
root.apps = Dir()
root.apps.myapp = MyApp()
cherrypy.tree.mount(root)

Это позволяет мне структурировать приложение так, как мне нужно. Я использую nginx, а не Apache, но не думаю, что это будет иметь значение. Хотя это становится немного многословным, если вы используете длинные пути, между которыми не так много всего.

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

person Robie Basak    schedule 09.11.2010

как это должно быть

app = cherrypy.tree.mount(MyApp(), '', 'settings.config')

разрешить http://localhost/apps/myapp? пробовали ли вы http://localhost/ или http://localhost/MyApp.

также важно, где вы определили свой WSGIScriptAlias ​​в Apache. vhost, местоположение?

person mo.    schedule 11.11.2010