Вишневый и относительный путь в приложении WSGI - PullRequest
6 голосов
/ 09 ноября 2010

работает cherrypy с mod_wsgi на apache вместе с другим приложением php. Приложение cherrypy НЕ монтируется в root, а скорее на что-то вроде '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

В первом случае происходит сбой, потому что cherrypy ожидает, что он находится в корне сервера, а не относительно того, где он монтируется через WSGI в apache.

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

По сути, я буду запускать несколько приложений cherrypy по нескольким различным путям и предпочел бы, чтобы apache обрабатывал диспетчеризацию (то есть cherrypy просто запускает приложение и не беспокоится об относительном пути). Таким образом, я могу избежать обновления нескольких разных файлов python / config каждый раз, когда меняются некоторые относительные пути на сервере.

Есть предложения?

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

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

Ответы [ 2 ]

1 голос
/ 09 ноября 2010

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

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

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

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

0 голосов
/ 11 ноября 2010

как это

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

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

, также важно, чтобы вы определили ваши WSGIScriptAlias ​​в Apache.vhost, локация?

...