¿Cómo construir uWSGI con soporte SSL para usar la función de API de intercambio de manos de websocket?

Lo que tengo: ubuntu 14.4 uwsgi corriendo con matraz (python) con nginx como proxy inverso.

Lo que quiero: ejecutar este ejemplo de WebSockets: https://github.com/zeekay/flask-uwsgi-websocket/blob/master/examples/echo/echo.py

Cuando ejecuto esta aplicación con chromepy en el puerto 5000, funciona bien, pero cuando bash ejecutar sin chromepy, aparece un error.

El error:

Thu Jun 12 12:58:24 2014 - you need to build uWSGI with SSL support to use the websocket handshake api function !!! Traceback (most recent call last): File "/home/lab_alglab/rep/car/local/lib/python2.7/site-packages/flask/app.py", line 1836, in __call__ return self.wsgi_app(environ, start_response) File "/home/lab_alglab/rep/car/local/lib/python2.7/site-packages/flask_uwsgi_websocket/websocket.py", line 54, in __call__ uwsgi.websocket_handshake(environ['HTTP_SEC_WEBSOCKET_KEY'], environ.get('HTTP_ORIGIN', '')) IOError: unable to complete websocket handshake 

Tuve que instalar OpenSSL a través de brew. A continuación, ejecute este comando.

 CFLAGS="-I/usr/local/opt/openssl/include" LDFLAGS="-L/usr/local/opt/openssl/lib" UWSGI_PROFILE_OVERRIDE=ssl=true pip install uwsgi -Iv 

Como se menciona en uno de los pósteres a continuación, necesitará los encabezados openssl, y si están en un lugar no tradicional (por ejemplo, en Mac OS-X), debe informar a uWSGI.

En Debian / Ubuntu, instálelos con “apt-get install libssl-dev”. Entrarán en / usr / include / “, que forma parte de la ruta automática de UWSGI. Debería haber terminado.

Mac OS-X El Capitan (10.11) eliminó los encabezados openssl. Puede verificar lugares comunes con este comando; puede que hayan sido instalados por un administrador de paquetes como brew o macports.

 find /usr/local/include /usr/include /opt/local/include /usr/local/ssl/include -name openssl -type d 2> /dev/null 

Si ese comando no devuelve nada, deberá instalar los encabezados. Puede instalarlos con MacPorts (port install openssl) que los colocará en / opt / local / include con un enlace en / usr / local / include. También puede instalarlos directamente, descargando y desbloqueando openssl, ejecutando “./Configure darwin64-x86_64-cc”, luego “make”, y finalmente “sudo make install”.

Las utilidades de comstackción de Xcode empaquetan todo un entorno de comstackción predefinido. Con los proyectos XCode, eso significa que los desarrolladores tienen una base común para trabajar, y cualquier cosa que no esté en la base debe estar en el proyecto XCode. La creación de proyectos de código abierto fuera de la base, se vuelve un poco desordenado porque las dependencias como openssl viven fuera de los directorios base. Puede dar a la cadena de comstackción de uwsgi un directorio de inclusión para usar. No soporta el estilo PATH: separador.

En la mayoría de los casos de instalación, lo siguiente debería funcionar en OpenSSL.

 UWSGI_INCLUDES=/usr/local/include/ pip install uwsgi 

simplemente instale los encabezados de desarrollo de openssl (libssl-dev) y reconstruya uwsgi (su sistema de comstackción detectará automáticamente la disponibilidad del ssl)

Arreglé mi versión de este problema instalando uwsgi a través de pip (fuera de venv) y cambiando el script de inicio (Ubuntu) /etc/init.d/uwsgi para ejecutar la twig 2.x recién instalada (en lugar de 1.9).

Pip instalado en / user / local / bin, así que cambié el daemon de línea a: DAEMON = “/ usr / local / bin / uwsgi”

Puede especificar la ubicación de los encabezados de desarrollo con LDFLAGS . Además, esto también puede suceder en OS X debido a que El Capitán ya no envía cabeceras.

 LDFLAGS="-L/usr/local/lib" pip install uwsgi --no-use-wheel