2016-10-27 3 views
0

Я пытаюсь запустить приложение web.py на моем сервере Apache. Но я получил ошибку wsgi, когда пытаюсь вызвать любую услугу REST. Ниже мой код:Не удается вызвать приложение web.py: wsgifunc() failed

urls = (
    '/publication/(.*)', 'PublicationStats', 
    '/author/(.*)', 'AuthorStats', 
    '/department/(.*)', 'DepartmentStats' 
) 
application = web.application(urls, globals()).wsgifunc() 
... 
if __name__ == "__main__": 
    #web.config.debug = True 
    application.run() 

Когда я попытался назвать мой REST API как /author/Smith, John, мой сервер Apache генерировать странную ошибку о WSGI:

[Thu Oct 27 15:54:28.614753 2016] [cgi:error] [pid 2979] [client 130.104.xxx.xxx:62194] AH01215: Traceback (most recent call last):, referer: http://test.dial.uclouvain.be/swagger/ 
[Thu Oct 27 15:54:28.614841 2016] [cgi:error] [pid 2979] [client 130.104.xxx.xxx:62194] AH01215: File "/var/www/html/api/dilbert/api.py", line 377, in <module>, referer: http://localhost/swagger/ 
[Thu Oct 27 15:54:28.614856 2016] [cgi:error] [pid 2979] [client 130.104.xxx.xxx:62194] AH01215:  application.run(), referer: http://localhost/swagger/ 
[Thu Oct 27 15:54:28.614877 2016] [cgi:error] [pid 2979] [client 130.104.xxx.xxx:62194] AH01215: AttributeError: 'function' object has no attribute 'run', referer: http://localhost/swagger/ 
[Thu Oct 27 15:54:28.636844 2016] [cgi:error] [pid 2979] [client 130.104.xxx.xxx:62194] End of script output before headers: api.py, referer: http://localhost/swagger/ 

Если я использую только «web.application(urls, globals())» он работает. Но мне нужно использовать wsgifunc, потому что мне нужно получить доступ к web.ctx.env variable.

mod_wsgi хорошо установлен на Apache. Кажется, прекрасно работает ... Надеюсь.
Спасибо за вашу помощь

Renaud

+0

Для меня это звучит как соответствующий обработчик не используется для сценария , В вашем файле '.htaccess' у вас есть' SetHandler wsgi-script' для этого скрипта? – sytech

ответ

0

базы по @sytech предложению, я обновить мою конфигурацию апачский так:

<IfModule wsgi_module> 
    WSGIApplicationGroup %{GLOBAL} 
    WSGIScriptAlias /api/dilbert /var/www/html/api/dilbert/api.py/ 
    WSGIPythonPath /var/www/html/api/dilbert 

    <Directory /var/www/html/api/> 
    Order deny,allow 
    Allow from all 
    <Files *.py> 
     SetHandler wsgi-script 
     Options ExecCGI FollowSymLinks 
    </Files> 
    </Directory> 
</IfModule> 
+1

Возможно, это не имеет значения, хотя может смутить вашу маршрутизацию приложения, но обычно вы не должны иметь конечную косую черту последнего аргумента для '' WSGIScriptAlias''. Директивы '' SetHandler wsgi-script'' и '' Options'' в этом контексте не нужны. Более вероятно, что ваша основная конфигурация Apache имеет '' .py'', сопоставленную с '' cgi-script''. Лучше переименовать '' api.py'' в '' api.wsgi'' и изменить '' WSGIScriptAlias'' для соответствия. Глупо, что некоторые дистрибутивы поставляются с '' .py'', сопоставленными с '' cgi-script''. –

 Смежные вопросы

  • Нет связанных вопросов^_^