Configuración del entorno de desarrollo integrado (IDE) Eclipse con Xdebug para la depuración remota de Drupal 7 en un cliente Windows.
Pre-requisitos
- Servidor LAMP instalado con Xdebug.
- Entorno de desarrollo integrado Eclipse instalado en un cliente.
Configuración de Eclipse para Drupal 7
En esta guía vamos a usar la versión estándar KEPLER de Eclipse instalada en un cliente Windows. Sin embargo, también se puede usar un cliente Linux o Mac.
El objetivo es configurar Eclipse en el cliente y así poder depurar la instalación de Drupal 7 en un servidor LAMP remoto.
PDT (PHP Development Tools)
Instalar el paquete PDT (herramientas de desarrollo de PHP) para Eclipse (en Eclipse seleccionar el menú Ayuda -> Instalar software nuevo).
Drupal Plug-in
Instalar el complemento (plug-in) Drupal para Eclipse como se muestra abajo.
- Nombre: XTND.US
- Ubicación: http://xtnd.us/downloads/eclipse
Drupal Hooks
Instalar la colección de plantillas de código de Drupal 7 para Eclipse PDT. Descargar las plantillas para Drupal 7 de la página del proyecto (en este ejemplo el archivo eclipse-7.x-1.2.tar.gz) y extraer el archivo Drupal.xml. Se trata de un archivo XML para importar las plantillas de ganchos (hooks) de Drupal 7 en Eclipse.
En Eclipse seleccionar el menú Ventana -> Preferencias -> PHP -> Editor -> Plantillas e importar el archivo Drupal.xml como se muestra abajo.
Normas de código para Drupal
Cambiar el formato de codificación de archivos y saltos de línea. En Eclipse seleccionar el menú Ventana -> Preferencias -> General -> Espacio de trabajo y definir las opciones
- Codificación de archivos de texto: UTF-8
- Nuevo delimitador de línea de archivos de texto: Unix
En Eclipse seleccionar el menú Ventana -> Preferencias -> PHP -> Editor -> Escribiendo y desactivar la opción
- Al pegar: Ajustar margen adicional
Cambiar la configuración para utilizar espacios en lugar de tabuladores. En Eclipse seleccionar el menú Ventana -> Preferencias -> General -> Editores -> Editores de texto y activar la opción
- Insertar espacios por tabuladores
En Eclipse seleccionar el menú Ventana -> Preferencias -> PHP -> Estilo de código -> Dar formato y crear un perfil nuevo para Drupal (en este ejemplo "Drupal Format") con la configuración general
- Norma de tabulador: Espacios
- Tamaño del margen adicional: 2
Activar el perfil nuevo "Drupal Format" como se muestra en la siguiente imagen.
Cambiar la configuración para eliminar los espacios finales en blanco en todas la líneas. En Eclipse seleccionar el menú Ventana -> Preferencias -> PHP -> Editor -> Acciones de guardar y activar las opciones
- Eliminar espacios finales en blanco
- Todas las líneas
Proyecto "Drupal7"
Descargar la versión recomendada del núcleo de Drupal 7 (en este ejemplo el archivo drupal-7.23.tar.gz) y descomprimirlo en la carpeta raíz de documentos (/srv/www/drupal.test.server/htdocs/) del host virtual drupal.test.server. Se puede acceder a ese directorio en el servidor LAMP desde el cliente Windows usando Samba.
La carpeta extraída drupal-7.23 contiene los achivos del núcleo de Drupal 7. Cambiar el nombre de esa carpeta a drupal7 para simplificar la ruta de los archivos.
En Eclipse crear un proyecto PHP nuevo "Drupal7" a partir de los archivos del núcleo de Drupal 7.
- Nombre del proyecto: Drupal7
- Directorio: W:\drupal.test.server\htdocs\drupal7
Configuración de Xdebug
En Eclipse seleccionar el menú Ventana -> Preferencias -> General -> Navegador Web y activar el navegador externo que prefiera. En este ejemplo usamos Firefox.
Crear una configuración de depuración para el proyecto Drupal7 en Eclipse.
En la parte izquierda seleccionar el tipo Aplicación Web PHP (PHP Web Application) y darle el nombre "Drupal 7 - PHP Web Application".
En la misma ventana, en la sección Servidor, pulsar el botón Nuevo (New) para crear una configuración nueva de Servidor PHP como se muestra abajo.
- Nombre: Drupal 7 - PHP Web Server
- URL Base: http://drupal.test.server
- Raíz de la web local: W:\drupal.test.server\htdocs\drupal7
Continuar (Next) añadiendo una asignación de ruta nueva con los valores
- Ruta en el servidor: /srv/www/drupal.test.server/htdocs/drupal7
- Ruta en el espacio de trabajo: /Drupal7
La ruta remota (LAMP) y local (Workspace) asignada se muestra en la imagen que sigue.
Pulsar el botón Finalizar (Finish) para cerrar la ventana de Servidor PHP y continuar con la configuración de depuración "Drupal 7 - PHP Web Application".
Seleccionar el Servidor PHP recién creado y el archivo index.php del espacio de trabajo.
- Servidor PHP: Drupal 7 - PHP Web Server
- Archivo: /Drupal7/index.php
En la sección URL, desactivar "Generar automático" y añadir el valor /drupal7/index.php en el campo derecho para formar finalmente la URL
- URL: http://drupal.test.server/drupal7/index.php
Continuar con la configuración del Depurador (Debugger). Seleccionar XDebug y configurarlo como se muestra abajo.
Utilizar el mismo puerto de depuración (Debug Port) de Xdebug en el servidor LAMP remoto (xdebug.remote_port=9000).
- Puerto de depuración: 9000
Pulsar el botón Aceptar (OK) para guardar los cambios.
Finalmente, iniciar la depuración de Drupal 7 haciendo clic en el botón Depurar (Debug).
En Eclipse, aceptar el cambio de la perspectiva PHP a Depuración. En la parte derecha de la ventana se pueden observar las variables.
Se abrirá una ventana nueva del navegador externo configurado en Eclipse (en este ejemplo Firefox).
En Eclipse, continuar paso a paso con la depuración pulsando el botón Paso Sobre (Step Over) o la tecla F6 hasta llegar al final.
En el navegador externo se puede ver ahora la primera página de la instalación de Drupal 7.
Eclipse está ahora configurado con Xdebug para la depuración remota de Drupal 7.
Solución de problemas (Troubleshooting)
Xdebug en Eclipse PDT se bloquea en el 57% (Waiting for Xdebug session)
En Eclipse, la depuración del proyecto no avanza y se queda colgada en 57%.
El puerto de depuración ya está ocupado
En una consola de comandos en el cliente Windows ejecutar
netstat -nb
Comprobar que el puerto de depuración (9000) no está siendo usado por otro proceso. Si es necesario, cambiar el puerto de depuración (por ejemplo a 9001) en Eclipse y en el servidor LAMP.
Xdebug está usando IPv6 en Eclipse
En una consola de comandos en el cliente Windows ejecutar
netstat -nb
Comprobar si Xdebug está usando IPv6
TCP [::]:9000
En el servidor LAMP Xdebug sólo puede comunicarse con IPv4. Para forzar el uso de IPv4 en Eclipse, añadir la siguiente línea en el archivo de configuración de Eclipse eclipse.ini
Extracto del archivo: eclipse.ini
-Djava.net.preferIPv4Stack=true
Reiniciar Eclipse y comprobar con el comando netstat que Xdebug está ahora usando IPv4
TCP 0.0.0.0:9000
El cortafuego (Firewall) en el cliente Windows está bloqueando la comunicación
Desde el servidor LAMP ejecutar el comando
telnet 192.168.0.155 9000
Trying 192.168.0.155... telnet: Unable to connect to remote host: Connection timed out
192.168.0.155 es la dirección IP del cliente Windows configurada en el servidor LAMP.
Buscar alguna regla de entrada del cortafuego en el cliente Windows que esté bloqueando la comunicación con Eclipse (Java).
Si es necesario, desactivar o cambiar la regla de entrada en el cortafuego.
Desde el servidor LAMP, comprobar nuevamente la conexión al cliente Windows por el puerto de depuración de Xdebug.
telnet 192.168.0.155 9000
Trying 192.168.0.155... Connected to 192.168.0.155. Escape character is '^]'.
El sistema para autocompletar código no funciona en Eclipse PDT
El asistente para autocompletar el código y resaltar la sintaxis de PHP (PDT) no está funcionando en la versión KEPLER de Eclipse.
Para solucionar este problema, apagar Eclipse, eliminar los archivos *.db en el directorio workspace/.metadata/.plugins/org.eclipse.dltk.core.index.sql.h2/ y, finalmente, iniciar Eclipse.