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
- Reiniciar el servicio Docker:
# macOS killall Docker && open /Applications/Docker.app # Linux sudo systemctl restart docker - Verificar conflictos de puertos:
# Find what's using port 8001 lsof -i :8001 # Kill conflicting process kill -9 <PID> - Limpiar recursos de Docker:
# Remove stopped containers docker-compose down # Remove all resources (careful!) docker-compose down -v --rmi all - 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
- Espere a que MySQL se inicialice:
# MySQL takes time on first run docker-compose logs mysql | grep "ready for connections" - Verifique las variables de entorno:
docker-compose exec frontend printenv | grep MYSQL - 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/
- Reiniciar el paquete web:
docker-compose exec frontend yarn run dev - Borrar caché del navegador:
- Actualización completa:
Ctrl+Shift+R(Windows/Linux) oCmd+Shift+R(Mac) -
Borrar todo: DevTools → Red → Desactivar caché
-
Reconstruir interfaz:
docker-compose exec frontend yarn build - 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
- Problemas de solución automática:
# Fix PHP ./vendor/bin/php-cs-fixer fix # Fix JS/TS yarn run lint:fix - Correcciones comunes de PHP:
// Add missing type declarations public function myMethod(string $param): int // Use strict types declare(strict_types=1); - 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
- Restablecer base de datos de prueba:
docker-compose exec frontend php stuff/bootstrap-environment.php - Revise los accesorios de prueba:
# Verify test data exists docker-compose exec mysql mysql -u omegaup -p omegaup -e "SELECT * FROM Users LIMIT 5" - 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:
- Actualizar anotaciones de tipo:
/** * @param array<string, mixed> $params * @return array{success: bool, data: mixed} */ - 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/
- Corredores de escala:
docker-compose up -d --scale runner=4 - Comprueba la salud del corredor:
docker-compose logs runner | grep -i error - 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'"
- Identificar consultas lentas:
SET GLOBAL slow_query_log = 'ON'; SET GLOBAL long_query_time = 1; - Agregar índices faltantes:
EXPLAIN SELECT ... -- Check query plan CREATE INDEX idx_name ON Table(column); - 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
- Aumentar la memoria PHP:
// php.ini memory_limit = 512M - 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/
- Comprueba que la emisora esté funcionando:
docker-compose ps broadcaster - 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:
- Buscar problemas existentes: Problemas de GitHub
- Preguntar en Discord: Únete a nuestro servidor
- Verificar registros: incluya siempre resultados de registro relevantes cuando solicite ayuda
- Crear un problema: Informar un error
Documentación relacionada
- Configuración de desarrollo - Configuración del entorno
- Obtener ayuda - Dónde hacer preguntas
- Monitoreo - Monitoreo del sistema
- Configuración de Docker - Configuración del contenedor