Solução de problemas
Problemas comuns e suas soluções ao trabalhar com omegaUp, abrangendo ambiente de desenvolvimento, problemas de construção e problemas de produção.
Ambiente de Desenvolvimento
Problemas do Docker
Os contêineres não iniciam
Sintomas: docker-compose up falha ou os contêineres são encerrados imediatamente.
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
- Reinicie o serviço Docker:
# macOS killall Docker && open /Applications/Docker.app # Linux sudo systemctl restart docker - Verifique conflitos de porta:
# Find what's using port 8001 lsof -i :8001 # Kill conflicting process kill -9 <PID> - Limpar recursos do Docker:
# Remove stopped containers docker-compose down # Remove all resources (careful!) docker-compose down -v --rmi all - Verifique o espaço em disco:
docker system df docker system prune
Erros de conexão do MySQL
Sintomas: Erros "Não é possível conectar ao 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
- Aguarde a inicialização do MySQL:
# MySQL takes time on first run docker-compose logs mysql | grep "ready for connections" - Verifique as variáveis de ambiente:
docker-compose exec frontend printenv | grep MYSQL - Redefinir dados MySQL:
docker-compose down -v docker volume rm omegaup_mysql_data docker-compose up -d
Frontend não atualiza
Sintomas: alterações de código não refletidas no navegador.
Diagnóstico:
# Check if webpack is running
docker-compose logs frontend | grep webpack
# Check file timestamps
ls -la frontend/www/js/dist/
- Reinicie o webpack:
docker-compose exec frontend yarn run dev - Limpar cache do navegador:
- Atualização total:
Ctrl+Shift+R(Windows/Linux) ouCmd+Shift+R(Mac) -
Limpar tudo: DevTools → Rede → Desativar cache
-
Reconstruir interface:
docker-compose exec frontend yarn build - Verifique as permissões do arquivo:
ls -la frontend/www/
Problemas do submódulo Git
Sintomas: Arquivos ausentes ou "fatal: nenhum mapeamento de submódulo encontrado".
Soluções:
# Initialize submodules
git submodule update --init --recursive
# Reset submodules
git submodule foreach git checkout .
git submodule update --init --recursive
Problemas de compilação
Falhas de linting
Sintomas: ./stuff/lint.sh falha com erros 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 correção automática:
# Fix PHP ./vendor/bin/php-cs-fixer fix # Fix JS/TS yarn run lint:fix - Correções comuns de PHP:
// Add missing type declarations public function myMethod(string $param): int // Use strict types declare(strict_types=1); - Correções comuns de JS/TS:
// Use const/let instead of var const x = 1; // Add explicit types function fn(x: number): string { }
Falhas no teste
Sintomas: Os testes PHPUnit, Jest ou Cypress falham.
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
- Redefinir banco de dados de teste:
docker-compose exec frontend php stuff/bootstrap-environment.php - Verifique os acessórios de teste:
# Verify test data exists docker-compose exec mysql mysql -u omegaup -p omegaup -e "SELECT * FROM Users LIMIT 5" - Execute testes individualmente:
# Isolate failing test docker-compose exec frontend ./vendor/bin/phpunit --filter testSpecificMethod
Erros de tipo de salmo
Sintomas: Erros de análise estática do Salmo.
Soluções:
- Anotações de tipo de atualização:
/** * @param array<string, mixed> $params * @return array{success: bool, data: mixed} */ - Verifique a linha de base:
# Update psalm baseline ./vendor/bin/psalm --update-baseline
Problemas de produção
Pendências da fila do avaliador
Sintomas: Envios presos na fila, longos tempos de espera.
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 - Verifique a saúde do corredor:
docker-compose logs runner | grep -i error - Limpar envios travados:
UPDATE Runs SET status = 'new' WHERE status = 'running' AND time < NOW() - INTERVAL 1 HOUR;
Desempenho do banco de dados
Sintomas: carregamento lento da página, erros de tempo limite.
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'"
- Identifique consultas lentas:
SET GLOBAL slow_query_log = 'ON'; SET GLOBAL long_query_time = 1; - Adicione índices ausentes:
EXPLAIN SELECT ... -- Check query plan CREATE INDEX idx_name ON Table(column); - Otimizar tabelas:
OPTIMIZE TABLE Runs; OPTIMIZE TABLE Submissions;
Problemas de memória
Sintomas: O contêiner OOM é eliminado, "Tamanho de memória permitido esgotado".
Diagnóstico:
# Check memory usage
docker stats
# Check PHP memory limit
docker-compose exec frontend php -i | grep memory_limit
- Aumente a memória do PHP:
// php.ini memory_limit = 512M - Aumentar os limites dos contêineres:
# docker-compose.yml services: frontend: deploy: resources: limits: memory: 2G
Problemas de conexão WebSocket
Sintomas: Atualizações em tempo real não funcionam, placar não atualiza.
Diagnóstico:
# Check broadcaster logs
docker-compose logs broadcaster
# Test WebSocket connection
wscat -c ws://localhost:39613/events/
- Verifique se a emissora está funcionando:
docker-compose ps broadcaster - Verifique a configuração do proxy nginx:
location ^~ /events/ { proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; }
Referência de erro
Mensagens de erro comuns
| Erro | Causa | Solução |
|---|---|---|
SQLSTATE[HY000] [2002] |
MySQL não está funcionando | Inicie o contêiner MySQL |
CSRF token mismatch |
Sessão expirada | Limpar cookies, fazer login novamente |
Permission denied |
Permissões de arquivo | chmod ou verifique a propriedade |
504 Gateway Timeout |
Tempo limite do PHP-FPM | Aumentar os tempos limite |
ENOMEM |
Sem memória | Aumentar limites |
Códigos de status HTTP
| Código | Significado | Causa Comum |
|---|---|---|
| 400 | Solicitação incorreta | Parâmetros inválidos |
| 401 | Não autorizado | Não logado |
| 403 | Proibido | Permissões insuficientes |
| 404 | Não encontrado | URL errado ou recurso excluído |
| 429 | Muitas solicitações | Taxa limitada |
| 500 | Erro no servidor | Verifique os logs do aplicativo |
| 502 | Gateway ruim | PHP-FPM não responde |
| 504 | Tempo limite do gateway | A solicitação demorou muito |
Obtendo mais ajuda
Se essas soluções não resolverem seu problema:
- Pesquisar problemas existentes: Problemas do GitHub
- Pergunte no Discord: Entre em nosso servidor
- Verifique os registros: sempre inclua saídas de registro relevantes ao pedir ajuda
- Crie um problema: Informar um bug
Documentação Relacionada
- Configuração de desenvolvimento - Configuração do ambiente
- Como obter ajuda - Onde fazer perguntas
- Monitoramento - Monitoramento do sistema
- Configuração do Docker - Configuração do contêiner