Mostrando entradas con la etiqueta composer. Mostrar todas las entradas
Mostrando entradas con la etiqueta composer. Mostrar todas las entradas

miércoles, 28 de enero de 2026

Xdebug y Composer: error de conexión con el cliente de Xdebug

 Al ejecutar el CLI composer run dev, lo primero que aparece es Xdebug: [Step Debug] Could not connect to debugging client. Tried: localhost:9003 (through xdebug.client_host/xdebug.client_port). Acto seguido empiezan a correr todos los procesos invocados por Composer, pero después el mismo mensaje de Xdebug aparece periódicamente sin límite.

Ese mensaje de Xdebug indica que está intentando iniciar una sesión de depuración pero no encuentra ningún cliente escuchando en el puerto 9003. Aunque no impide que Composer funcione, puede generar ruido constante en la consola. Para solucionarlo, podés desactivar el modo de depuración o configurar correctamente tu cliente (como VS Code o PhpStorm).

🔧 ¿Por qué aparece este mensaje?

Xdebug está configurado para iniciar una sesión de step debugging cada vez que se ejecuta PHP. Intenta conectarse a un cliente de depuración (como VS Code o PhpStorm) en localhost:9003, pero no encuentra ninguno escuchando.

Esto suele pasar cuando:

  • No tenés abierto el cliente de depuración.

  • El cliente no está configurado para escuchar en el puerto correcto.

  • Estás ejecutando PHP desde CLI (como composer run dev) sin necesidad de depurar.

✅ Soluciones recomendadas

1. Desactivar el step debugging para CLI

Si no necesitás depurar desde la terminal, podés desactivar el modo automático:

ini
; En tu php.ini o xdebug.ini
xdebug.mode = develop

Esto desactiva debug pero mantiene otras funciones útiles como trazas de errores.

2. Configurar tu cliente de depuración

Si querés usar Xdebug con VS Code, asegurate de tener:

  • launch.json en .vscode:

json
{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Listen for Xdebug",
      "type": "php",
      "request": "launch",
      "port": 9003
    }
  ]
}
  • Extensión de PHP Debug instalada.

  • VS Code abierto y escuchando antes de ejecutar el script.

3. Evitar que Composer active Xdebug

Podés ejecutar Composer sin Xdebug usando:

bash
php -dxdebug.mode=off $(which composer) run dev

O bien instalar el plugin oficial:

bash
composer require --dev composer/xdebug-handler

Este plugin desactiva Xdebug automáticamente en entornos donde no se necesita.

🧠 ¿Es un problema grave?

No. Composer sigue funcionando normalmente. Pero si no estás usando Xdebug activamente, conviene desactivarlo para evitar ruido y mejorar el rendimiento.

¿Querés que te ayude a configurar tu entorno para depurar con VS Code en proyectos Laravel o React-PHP?

domingo, 5 de octubre de 2025

Recurso para encontrar un conflicto de requisitos de Composer

 La historia corta: Probar con un número de versión específico en composer require paquete versión, para acotar el rango de paquetes y así acortar la salida del log.


Cuando a Composer no le especificás un número de versión como en composer require paquete (omitiendo el número de versión), Composer primero va a intentar con la versión más reciente, y cada vez que falle la instalación por un conflicto de requisitos, Composer va a intentar una versión anterior.

Este proceso termina o con una versión que se pueda instalar o con una colección de errores, uno por cada versión que falló al instalar.

La diferencia entre especificar una versión y no hacerlo es que en el primer caso si falla, la salida del log muestra el error correspondiente a la única versión que intentó instalar, en cambio, en el segundo caso si fallan todos los intentos, la salida del log contiene la colección completa de errores, algo muy difícil de leer.

Conclusión: lo mejor es probar con una combinación de ambas formas. En el primer intento omitir la versión, para dejar de Composer vaya probando inteligentemente con todas las versiones disponibles. Si da error, en segundo lugar, ir a Packagist a ver todas las versiones que tiene el paquete para ir probando una por una la instalación y viendo qué error arroja cada versión, para concentrarse de a uno por vez en cada error que uno pueda arreglar para lograr la instalación del paquete.

Al hacer esto es mejor ir cambiando de versión de número mayor en número mayor, para acortar la cantidad de versiones a probar.

viernes, 20 de junio de 2025

Disponibilizar un comando de terminal de un paquete instalado globalmente con Composer

Composer, el gestor de dependencias de PHP, nos ofrece la opción de instalar paquetes globalmente, para que puedan ser ejecutados como cualquier comando de shell, por ejemplo, ls, date, grep.

composer global require paquete

En Ubuntu 20, Composer instala estos paquetes en ~/.config/composer/vendor/bin.

Entonces, solo es cuestión de crear un enlace simbólico: ln -s ~/.config/composer/vendor/bin/laravel ~/.local/bin/. Si ejecutas ls -la .local/bin/ deberías ver un enlace simbólico para el comando laravel.

Opción dos: el problema con el primer enfoque es que necesitas crear un enlace simbólico para cada paquete global que instales. Así que, ¿por qué no olvidarnos de este rollo de ~/bin y ~/.local/bin y agregar la carpeta bin de Composer directamente a $PATH? Probablemente ya te diste cuenta, pero solo agrega esto a ~/.profile~/.bashrc o ~/.bash_profile:

if [ -d "/home/your-user/.config/composer/vendor/bin" ] ; then
    PATH="/home/your-user/.config/composer/vendor/bin:$PATH"
fi

Solo asegúrate de usar la ruta correcta de composer para tu sistema. El comando Laravel estará disponible en todo el sistema y puedes probarlo escribiendo "lara" y presionando TAB para autocompletar.


Fuente: https://www.reddit.com/r/laravel/comments/sykdco/after_installing_laravel_the_command_laravel_isnt/

domingo, 8 de junio de 2025

Cómo manejar en Eclipse PDT errores por dependencias PHP de Composer que son sugeridas pero no instaladas

¿Por qué un proyecto Laravel creado con composer create-project laravel/laravel depende del paquete ably-php pero no se descarga dicho paquete?


Esta pregunta apunta a una característica importante de cómo Composer maneja las dependencias: el concepto de suggest (sugerir) en composer.json.

Cuando creas un proyecto Laravel con composer create-project laravel/laravel, el paquete principal que se instala es laravel/framework, junto con algunas otras dependencias esenciales.

La razón por la que podrías ver que ably-php "depende" (o aparece mencionado) pero no se descarga es la siguiente:

  1. No es una dependencia require directa ni transitiva obligatoria:

    ably-php (el cliente PHP para el servicio de mensajería en tiempo real Ably) no es una dependencia obligatoria para que Laravel funcione. Tu aplicación Laravel no lo necesita para arrancar ni para realizar tareas básicas como routing, ORM, etc.

  2. Es una dependencia suggest (sugerida):

    El paquete laravel/framework (que es el núcleo de tu aplicación Laravel) tiene una sección en su composer.json llamada suggest. En esta sección, lista paquetes opcionales que podrías querer instalar si vas a usar ciertas funcionalidades de Laravel.

    Por ejemplo, Laravel soporta la funcionalidad de Broadcasting (transmisión de eventos en tiempo real). Para usar Broadcasting, Laravel necesita un driver, y Ably es uno de los drivers soportados.

    Entonces, en el composer.json de laravel/framework (o de algún componente relacionado con broadcasting), verás algo parecido a esto en la sección suggest:

    JSON
    {
        "name": "laravel/framework",
        "type": "library",
        // ... otras configuraciones
        "suggest": {
            "ably/ably-php": "Required to use the Ably broadcast driver.",
            "pusher/pusher-php-server": "Required to use the Pusher broadcast driver.",
            "php-amqplib/php-amqplib": "Required to use the RabbitMQ / AMQP queue driver.",
            // ... otras sugerencias
        },
        // ...
    }
    

¿Qué significa suggest en Composer?

  • Cuando un paquete sugiere otro, significa: "Este paquete (ej. laravel/framework) puede funcionar sin el paquete sugerido (ably-php), pero si quieres usar una funcionalidad específica (ej. Broadcasting con Ably), entonces necesitarás instalarlo aparte."
  • Composer no instala automáticamente los paquetes listados en suggest. Simplemente los muestra en la salida cuando ejecutas composer install o composer update (a veces con un mensaje como "Package X is suggested by Y for Z functionality"). Es una pista para el desarrollador.

¿Por qué elegir suggest en lugar de require?

Se usa suggest para:

  1. Mantener el tamaño del paquete base pequeño: No se fuerza a todos los usuarios de Laravel a descargar dependencias que no usarán si no implementan ciertas funcionalidades.
  2. Evitar dependencias innecesarias: Permite a los desarrolladores elegir solo lo que necesitan, reduciendo la "huella" de dependencias del proyecto.
  3. Flexibilidad: Laravel puede sugerir múltiples drivers o implementaciones para una misma funcionalidad (como varios drivers de broadcasting o de colas), sin obligar a instalar todos.

En resumen:

Un proyecto Laravel estándar "sugiere" ably-php porque laravel/framework tiene soporte para usar Ably como driver de broadcasting, pero no lo "requiere" directamente. Por lo tanto, Composer te informa de su existencia pero no lo descarga a menos que tú lo pidas explícitamente.

Si en algún momento decides usar Ably para las funcionalidades de tiempo real en tu aplicación Laravel, deberás instalarlo manualmente ejecutando:

Bash
composer require ably/ably-php

Solo entonces el paquete se descargará y se incluirá en tu vendor/ y en tu composer.lock.