Cuando creas una aplicación Python (como un proyecto en Django o Flask) en cPanel utilizando la herramienta Setup Python App, el servidor genera automáticamente un archivo en la raíz de tu proyecto llamado passenger_wsgi.py.
Si intentas entrar a tu web recién creada, verás una pantalla sencilla que dice "It works!" junto con la versión de Python. Ese texto proviene de la configuración por defecto de este archivo.
Para que tu web muestre tu aplicación real (y no el mensaje de prueba), necesitas modificar passenger_wsgi.py. Este archivo actúa como el "traductor" o puente entre el servidor web (Phusion Passenger) y el código de tu proyecto. Configurarlo mal es la causa número uno del molesto error "Incomplete response received from application".
En esta guía te enseñaremos cómo configurar tu passenger_wsgi.py de forma correcta para Django y Flask.
La regla de oro de Phusion Passenger
Antes de ver el código, hay una regla física e inquebrantable que debes conocer:
El objeto principal de tu aplicación SIEMPRE debe llamarse
application.Phusion Passenger busca de forma estricta un objeto ejecutable con el nombre exacto de
applicationdentro de tu archivopassenger_wsgi.py. Si en tu código de Flask tu objeto principal se llamaapp(como es habitual), o si en Django no lo exportas correctamente, la aplicación fallará de inmediato.
Caso 1: Configuración para Flask
Por defecto, en un proyecto de Flask sueles inicializar el servidor con algo como app = Flask(__name__). Para que funcione en tu hosting, debes importar ese objeto app y renombrarlo como application.
Abre tu archivo passenger_wsgi.py en el Administrador de Archivos de cPanel, borra todo su contenido y pega el siguiente bloque:
import sys
import os
# 1. Agrega la carpeta de tu proyecto al sistema para que Python encuentre tus archivos
sys.path.insert(0, os.path.dirname(__file__))
# 2. Importa tu objeto Flask (asumiendo que tu archivo principal es 'main.py' o 'app.py')
# y renombralo como 'application' para que Passenger lo reconozca.
from main import app as application
Caso 2: Configuración para Django
En Django, la estructura es un poco diferente porque el propio framework ya cuenta con su propio archivo WSGI (wsgi.py) dentro de la carpeta de tu proyecto. Lo que haremos en el archivo de cPanel es redirigir el tráfico hacia él.
Borra el contenido de tu passenger_wsgi.py y reemplázalo por este código:
import sys
import os
# 1. Agrega la carpeta raíz de tu aplicación al path
sys.path.insert(0, os.path.dirname(__file__))
# 2. Indica a Django dónde se encuentra tu archivo de configuración 'settings.py'
# (Reemplaza 'mi_proyecto_django' por el nombre de la carpeta de tu proyecto)
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mi_proyecto_django.settings")
# 3. Importa el gestor WSGI nativo de Django
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
Paso a paso para aplicar y probar la configuración
Sigue esta secuencia para asegurarte de que el servidor web procese los cambios de forma limpia:
¿Qué hacer si aparece un error 500 o "Incomplete response"?
Si tras configurar el archivo e intentar cargar tu web te topas con una pantalla de error de Phusion Passenger, la causa más común es que tu entorno virtual no tiene instaladas las librerías necesarias (como el propio Django o Flask) o que hay un error de importación en tu código.
Para solucionarlo:
-
Revisa el archivo
stderr.logque se genera automáticamente en la carpeta raíz de tu aplicación. -
Abre este archivo con el editor de cPanel; allí verás el Traceback clásico de Python indicándote con precisión quirúrgica en qué línea de tu código o de tu
passenger_wsgi.pyocurrió el fallo.