2016-03-23 1 views
0

Я развернул приложение Flask на Webfaction с помощью mod_wsgi. Мое приложение довольно простое, но реализует Flask-SocketIO, который дает мне проблемы. Мой код отлично работает на моем локальном хосте, но теперь, когда он работает на моем сервере Webfaction, клиент не может подключиться к моему сокету. Я не совсем уверен, откуда возникают мои проблемы. Я полагаю, что я не настроил свой файл конфигурации apache правильно, но это может быть неверно.Запуск Flask-SocketIO на WebFaction через mod_wsgi

На стороне клиента я получаю ошибку 400 (неверный запрос) как на GET & POST-вызовах на веб-сайт. С перерывами я вижу предупреждение, предупреждающее меня, что розетка закрыта до установления связи. Иногда я также получаю сообщение об ошибке, когда во время обращения к WebSocket произошла ошибка.

Мой апач файл httpd.conf выглядит следующим образом:

ServerRoot "/home/<user>/webapps/<my_app>/apache2" 

LoadModule authz_core_module modules/mod_authz_core.so 
LoadModule dir_module  modules/mod_dir.so 
LoadModule env_module  modules/mod_env.so 
LoadModule log_config_module modules/mod_log_config.so 
LoadModule mime_module  modules/mod_mime.so 
LoadModule rewrite_module modules/mod_rewrite.so 
LoadModule setenvif_module modules/mod_setenvif.so 
LoadModule wsgi_module  modules/mod_wsgi.so 
LoadModule unixd_module  modules/mod_unixd.so 

Listen 18161 
KeepAlive On 
SetEnvIf X-Forwarded-SSL on HTTPS=1 
ServerLimit 1 
StartServers 1 
MaxRequestWorkers 5 
MinSpareThreads 1 
MaxSpareThreads 3 
ThreadsPerChild 5 

WSGIDaemonProcess <my_app> processes=2 threads=12 python-path=/home/<user>/webapps/<my_app>:/home/<user>/webapps/<my_app>/lib/python2.7 
WSGIProcessGroup <my_app> 
WSGIRestrictEmbedded On 
WSGILazyInitialization On 

WSGIScriptAlias//home/<user>/webapps/<my_app>/wsgi.py 

Я видел несколько сообщений о proxy_module & proxy_http_module, но я не совсем уверен, что мне нужно, что и если это так, как точно настроить его , Любые рекомендации по этому вопросу будут высоко оценены!

ответ

1

Этот материал около proxy_module и proxy_http_module предназначен для использования Apache в качестве прокси-сервера для внутреннего веб-приложения. Это не относится к тому, что вы пытаетесь сделать.

mod_wsgi не подходит для использования в приложениях для веб-приложений. Не используйте его - вместо этого используйте один из вариантов развертывания, рекомендованных в Deployment section of the Flask-SocketIO docs.

Например, чтобы использовать первый рекомендованный параметр (то есть встроенный сервер) в WebFaction, сначала установите модуль eventlet. Я предполагаю, что вы уже установили Flask и Flask-SocketIO в этот момент.

Затем установите приложение пользовательских приложений для веб-приложений, прослушивающих порт, через панель управления WebFaction. Запишите назначенный порт приложения, затем назначьте приложение веб-сайту в панели управления. Вам не нужно открывать порт приложения.

Затем настройте приложение Flask-SocketIO для запуска на порте, назначенном вашему приложению в веб-окнах. Самый простой способ сделать это, чтобы пройти порт, socketio.run, например:

if __name__ == '__main__': 
    socketio.run(app, port=12345) 

В вашем JavaScript, подключение, как это:

var socket = io.connect('http://' + document.domain + ':' + location.port + namespace); 

Наконец, просто запустите приложение:

python2.7 whatever.py 

В этот момент ваше приложение будет запущено и запущено в любом домене, который вы назначили на веб-сайт, на котором вы создали несколько шагов назад.

При загрузке сайта JS будет сортировать информацию о соединении от document.domain и location.port. Если вы откроете инструменты для своего браузера (инспектор Chrome или что-то еще), вы увидите, что соединения веб-камер делаются с ws://yourdomain.com/.

Надеюсь, что это поможет!

+0

для моего приложения Flask-SocketIO, мне нужно создать другое приложение с панели управления? – TukangBeling

+0

Хорошо, я получил его сейчас, спасибо – TukangBeling