Saltar a contenido

Solución de problemas

Problemas comunes y sus soluciones al trabajar con omegaUp, que cubren el entorno de desarrollo, problemas de compilación y problemas de producción.

Entorno de desarrollo

Problemas con Docker

Los contenedores no se inician

Síntomas: docker-compose up falla o los contenedores salen inmediatamente.

Diagnóstico:

# Check Docker is running
docker ps

# Check container status
docker-compose ps

# View container logs
docker-compose logs

# Check specific container
docker-compose logs frontend
Soluciones:

  1. Reiniciar el servicio Docker:
    # macOS
    killall Docker && open /Applications/Docker.app
    
    # Linux
    sudo systemctl restart docker
    
  2. Verificar conflictos de puertos:
    # Find what's using port 8001
    lsof -i :8001
    
    # Kill conflicting process
    kill -9 <PID>
    
  3. Limpiar recursos de Docker:
    # Remove stopped containers
    docker-compose down
    
    # Remove all resources (careful!)
    docker-compose down -v --rmi all
    
  4. Compruebe el espacio en disco:
    docker system df
    docker system prune
    

Errores de conexión MySQL

Síntomas: Errores "No se puede conectar al servidor MySQL".

Diagnóstico:

# Check MySQL container is running
docker-compose ps mysql

# Check MySQL logs
docker-compose logs mysql | tail -50

# Test connection
docker-compose exec mysql mysql -u omegaup -p
Soluciones:

  1. Espere a que MySQL se inicialice:
    # MySQL takes time on first run
    docker-compose logs mysql | grep "ready for connections"
    
  2. Verifique las variables de entorno:
    docker-compose exec frontend printenv | grep MYSQL
    
  3. Restablecer datos de MySQL:
    docker-compose down -v
    docker volume rm omegaup_mysql_data
    docker-compose up -d
    

La interfaz no se actualiza

Síntomas: los cambios de código no se reflejan en el navegador.

Diagnóstico:

# Check if webpack is running
docker-compose logs frontend | grep webpack

# Check file timestamps
ls -la frontend/www/js/dist/
Soluciones:

  1. Reiniciar el paquete web:
    docker-compose exec frontend yarn run dev
    
  2. Borrar caché del navegador:
  3. Actualización completa: Ctrl+Shift+R (Windows/Linux) o Cmd+Shift+R (Mac)
  4. Borrar todo: DevTools → Red → Desactivar caché

  5. Reconstruir interfaz:

    docker-compose exec frontend yarn build
    

  6. Verificar permisos de archivos:
    ls -la frontend/www/
    

Problemas con el submódulo de Git

Síntomas: Faltan archivos o "fatal: no se encontró ninguna asignación de submódulo".

Soluciones:

# Initialize submodules
git submodule update --init --recursive

# Reset submodules
git submodule foreach git checkout .
git submodule update --init --recursive


Problemas de compilación

Fallos de pelusa

Síntomas: ./stuff/lint.sh falla con errores de estilo.

Diagnóstico:

# Run linter with verbose output
./stuff/lint.sh

# Run specific linter
./stuff/lint.sh php
./stuff/lint.sh js
Soluciones:

  1. Problemas de solución automática:
    # Fix PHP
    ./vendor/bin/php-cs-fixer fix
    
    # Fix JS/TS
    yarn run lint:fix
    
  2. Correcciones comunes de PHP:
    // Add missing type declarations
    public function myMethod(string $param): int
    
    // Use strict types
    declare(strict_types=1);
    
  3. Correcciones comunes de JS/TS:
    // Use const/let instead of var
    const x = 1;
    
    // Add explicit types
    function fn(x: number): string { }
    

Fallos de prueba

Síntomas: Las pruebas de PHPUnit, Jest o Cypress fallan.

Diagnóstico:

# Run specific test
docker-compose exec frontend ./vendor/bin/phpunit tests/controllers/UserTest.php

# Run with verbose output
docker-compose exec frontend ./vendor/bin/phpunit -v
Soluciones:

  1. Restablecer base de datos de prueba:
    docker-compose exec frontend php stuff/bootstrap-environment.php
    
  2. Revise los accesorios de prueba:
    # Verify test data exists
    docker-compose exec mysql mysql -u omegaup -p omegaup -e "SELECT * FROM Users LIMIT 5"
    
  3. Ejecutar pruebas individualmente:
    # Isolate failing test
    docker-compose exec frontend ./vendor/bin/phpunit --filter testSpecificMethod
    

Errores de tipo de salmo

Síntomas: Errores de análisis estático del Salmo.

Soluciones:

  1. Actualizar anotaciones de tipo:
    /**
     * @param array<string, mixed> $params
     * @return array{success: bool, data: mixed}
     */
    
  2. Verifique la línea de base:
    # Update psalm baseline
    ./vendor/bin/psalm --update-baseline
    

Problemas de producción

Trabajo pendiente en la cola de calificadores

Síntomas: Envíos atascados en la cola, tiempos de espera prolongados.

Diagnóstico:

# Check queue length
curl http://grader:36663/grader/status/

# Check runner availability
curl http://grader:36663/grader/runners/
Soluciones:

  1. Corredores de escala:
    docker-compose up -d --scale runner=4
    
  2. Comprueba la salud del corredor:
    docker-compose logs runner | grep -i error
    
  3. Eliminar envíos atascados:
    UPDATE Runs SET status = 'new' WHERE status = 'running' AND time < NOW() - INTERVAL 1 HOUR;
    

Rendimiento de la base de datos

Síntomas: cargas de página lentas, errores de tiempo de espera.

Diagnóstico:

# Check slow queries
docker-compose exec mysql mysql -u root -p -e "SHOW PROCESSLIST"

# Check query performance
docker-compose exec mysql mysql -u root -p -e "SHOW STATUS LIKE 'Slow_queries'"
Soluciones:

  1. Identificar consultas lentas:
    SET GLOBAL slow_query_log = 'ON';
    SET GLOBAL long_query_time = 1;
    
  2. Agregar índices faltantes:
    EXPLAIN SELECT ... -- Check query plan
    CREATE INDEX idx_name ON Table(column);
    
  3. Optimizar tablas:
    OPTIMIZE TABLE Runs;
    OPTIMIZE TABLE Submissions;
    

Problemas de memoria

Síntomas: El OOM del contenedor se interrumpe, "Tamaño de memoria permitido agotado".

Diagnóstico:

# Check memory usage
docker stats

# Check PHP memory limit
docker-compose exec frontend php -i | grep memory_limit
Soluciones:

  1. Aumentar la memoria PHP:
    // php.ini
    memory_limit = 512M
    
  2. Aumentar los límites de contenedores:
    # docker-compose.yml
    services:
      frontend:
        deploy:
          resources:
            limits:
              memory: 2G
    

Problemas de conexión de WebSocket

Síntomas: Las actualizaciones en tiempo real no funcionan, el marcador no se actualiza.

Diagnóstico:

# Check broadcaster logs
docker-compose logs broadcaster

# Test WebSocket connection
wscat -c ws://localhost:39613/events/
Soluciones:

  1. Comprueba que la emisora esté funcionando:
    docker-compose ps broadcaster
    
  2. Verifique la configuración del proxy nginx:
    location ^~ /events/ {
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
    

Referencia de errores

Mensajes de error comunes

Error Causa Solución
SQLSTATE[HY000] [2002] MySQL no se ejecuta Iniciar contenedor MySQL
CSRF token mismatch Sesión caducada Borrar cookies, volver a iniciar sesión
Permission denied Permisos de archivos chmod o comprobar propiedad
504 Gateway Timeout Tiempo de espera de PHP-FPM Aumentar los tiempos de espera
ENOMEM Sin memoria Aumentar límites

Códigos de estado HTTP

Código Significado Causa común
400 Solicitud incorrecta Parámetros no válidos
401 No autorizado No iniciado sesión
403 Prohibido Permisos insuficientes
404 No encontrado URL incorrecta o recurso eliminado
429 Demasiadas solicitudes Tarifa limitada
500 Error del servidor Verifique los registros de la aplicación
502 Mala puerta de enlace PHP-FPM no responde
504 Tiempo de espera de puerta de enlace La solicitud tardó demasiado

Obtener más ayuda

Si estas soluciones no resuelven su problema:

  1. Buscar problemas existentes: Problemas de GitHub
  2. Preguntar en Discord: Únete a nuestro servidor
  3. Verificar registros: incluya siempre resultados de registro relevantes cuando solicite ayuda
  4. Crear un problema: Informar un error

Documentación relacionada