Python FastCGI

Configurar Bootstrap

¡INFORMACIÓN POSIBLEMENTE DESACTUALIZADA!
Es posible que la información de esta página no funcione o no funcione según lo previsto. El soporte de DreamHost no puede ayudar con ninguna personalización. ¡Úsala bajo tu propio riesgo!

El siguiente es un procedimiento rápido para establecer una aplicación FCGI simple que ejecute Python.

  1. Navega a la página Manage Domains.
  2. Haz clic en el enlace Edit debajo del dominio que deseas editar y desplázate hacia abajo hasta la sección Web Options.
  3. Habilita tu dominio para soporte FastCGI.
  4. Descarga fcgi.py, y guárdalo en tu PYTHONPATH.
  5. Crea tu controlador de página predeterminado, dispatch.fcgi:
    • Debes usar dispatch.fcgi o encontrará que el proceso es terminado en la mitad de la ejecución. Puedes encontrar más información en el artículo Solución de problemas de Django.
    • Asegúrate de usar la ruta #!/home/username/bin/python y no #!/usr/bin/env python con Pylons.
    #!/usr/bin/env python
    
    def myapp(environ, start_response):
        start_response('200 OK', [('Content-Type', 'text/plain')])
        return ['Hello World!\n']
    
    if __name__ == '__main__':
        from fcgi import WSGIServer
        WSGIServer(myapp).run()
  6. Haz que dispatch.fcgi sea ejecutable. Asegúrate de que no se pueda escribir en grupo o puede ocurrir un error 500 interno:
    [server]$ chmod 755 dispatch.fcgi
    
  7. Crea un archivo .htaccess para redirigir todas las solicitudes a este script:
    RewriteEngine On
    RewriteBase /
    RewriteRule ^dispatch\.fcgi/ - [L]
    RewriteRule ^(.*)$ dispatch.fcgi/$1 [L]
  8. Después de que se actualice, actualiza la página con touch dispatch.fcgi.

Configuración de ejemplo

La siguiente es una configuración de muestra para hacer que FCGI y Python trabajen juntos:

  1. Descarga Virtual Python:
    [server]$ wget http://peak.telecommunity.com/dist/virtual-python.py
    

    virtualenv se prefiere en vez de virtual-python, ya que automatiza gran parte de este proceso. Consulta Instalar Python virtualenv para más detalles.

  2. Crea un directorio llamado packages en el cual instalar cosas:
    [server]$ mkdir ~/packages
    
  3. Ve el artículo crear y editar un archivo a través de SSH para instrucciones sobre como editar tu  .bash_profile existente. Añádele el siguiente código:
    export PYTHONPATH="$HOME/packages/lib/python2.3/site-packages"
    export LD_LIBRARY_PATH="$HOME/packages/lib"
    export PATH="$HOME/packages/bin:$PATH"
  4. Guarda y cierra el archivo y vuelve a tu shell.
  5. Ejecuta el instalador de python virtual y dile que se instale en "packages" en lugar de en el directorio de inicio:
    [server]$ python virtual-python.py --prefix packages/
    
  6. Alternativamente, instala easy_install:
    [server]$ wget http://peak.telecommunity.com/dist/ez_setup.py
    [server]$ python ez_setup.py
    
  7. Descarga fcgi.py y ubícalo en ~/packages/lib/python2.3/site-packages. Puedes utilizar Flup alternativamente, como se muestra en la siguiente sección.

    fcgi.py sirve Tracebacks completos de Python en HTML de forma predeterminada, lo cual es un problema de seguridad. Debes anular el método [WSGI]Server.error().

  8. Para probar la instalación virtual de python y fcgi, sigue las instrucciones del artículo de Django.
  9. Guarda el siguiente código en un archivo llamado dispatch.fcgi en ~/example.com:
    #!/home/my-username/packages/bin/python
    from fcgi import WSGIServer
    def test_app(environ, start_response):
        start_response('200 OK', [('Content-Type', 'text/plain')])
        yield 'Hello, world!\n'
    
    WSGIServer(test_app).run()
  10. Hazlo ejecutable y crea un archivo .htaccess en el mismo directorio que dispatch.fcgi:
    [server]$ chmod a+x ~/example.com/dispatch.fcgi
    
    .htaccess:
    RewriteEngine On
    RewriteBase /
    RewriteRule ^dispatch\.fcgi/ - [L]
    RewriteRule ^(.*)$ dispatch.fcgi/$1 [L]
  11. Espera unos minutos y luego prueba http://www.example.com/dispatch.fcgi.

Usar Flup

Como alternativa al uso de fcgi.py, puedes ejecutar Flup para usar FastCGI en DreamHost. Si eliges hacerlo, no necesitas descargar ni instalar fcgi.py. En su lugar, simplemente instala Flup con easy_install:

[server]$ easy_install Flup

Si planeas usar una versión de Python 3 instalada localmente, usa la versión de Flup que sea compatible con Python 3. Simplemente usa Mercurial para buscar la fuente:

[server]$ hg clone http://hg.saddi.com/flup-py3.0
cd flup-py3.0
# make sure setup.py is executed by your local version of Python
python setup.py install

También debes agregar import sys al archivo de envío. El nuevo archivo dispatch.fcgi debería tener el siguiente aspecto:

#!/home/my-username/packages/bin/python

import sys

from flup.server.fcgi_fork import WSGIServer

def test_app(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/plain')])
    yield 'Hello, world!\n'

WSGIServer(test_app).run()

No se requieren cambios en tu archivo .htaccess ni en ninguna otra cosa. Una vez que funcione "Hello World", estarás listo para comenzar a usar Python. Simplemente instala lo que necesitas a través de easy_install y continúa desde allí.

Solución de problemas

Puedes diagnosticar muchos errores ejecutando dispatch.fcgi desde la línea de comando:

[server]$ ./dispatch.fcgi

Puedes ignorar los errores WSGIServer: missing FastCGI param.

Si ocurre un error interno 500, intenta cambiar los permisos para que dispatch.fcgi no se pueda escribir en grupo. Aquí hay un ejemplo:

[server]$ chmod 755 dispatch.fcgi

Ver también

  • Python
  • FastCGI
  • Django — El marco de aplicación web de Python a menudo se implementa a través de FastCGI
  • Passenger WSGI — Una alternativa al uso de FastCGI en DreamHost

¿Este artículo ha respondido sus preguntas?

Última actualización el PST.

¿Aún no encuentra lo que busca?