Resolución de problemas de Polymarket
Recuperación exacta de fallos de configuración, origen, colector y ClickHouse.
Windows y WSL 2
Todas las entradas presuponen el entorno Windows compatible de 00 Configuración: Ubuntu en WSL 2 con integración WSL de Docker Desktop.
Un comando «no se reconoce» en PowerShell
Síntoma: PowerShell rechaza ./preflight.sh, source, export u otro comando del taller.
Causa: PowerShell solo se utiliza para la inicialización de WSL indicada en el Módulo 00. Todos los comandos del taller se ejecutan dentro de Ubuntu.
Abre Ubuntu desde el menú Inicio, vuelve al directorio del laboratorio y carga de nuevo el archivo de entorno; un shell nuevo no lo hereda:
cd "$(git rev-parse --show-toplevel)/workshop_public/polymarket"
set -a; source ./.env.polymarket; set +a
./preflight.shEl repositorio está en /mnt/c
Síntoma: los bind mounts de Docker son lentos, ./preflight.sh informa de un error de permisos o
pwd empieza por /mnt/c/Users/.
Causa: el clone se creó en el sistema de archivos de Windows, no en el sistema Linux de WSL.
Clona una copia limpia en tu directorio home de Linux y no transfieras nada salvo tu
.env.polymarket rellenado:
cd ~
git config --global core.autocrlf input
git clone https://github.com/ClickHouse/ClickHouse_Demos.git
cd ClickHouse_Demos
git switch build-workshop-v1
cd "$(git rev-parse --show-toplevel)/workshop_public/polymarket"
cp .env.polymarket.example .env.polymarketUbuntu se ejecuta como WSL 1
Síntoma: wsl --list --verbose muestra Ubuntu con VERSION 1, o Docker Desktop no puede integrarse con la distribución.
En PowerShell como Administrador:
wsl --set-version Ubuntu 2
wsl --set-default-version 2
wsl --list --verbosedocker no está disponible dentro de Ubuntu
Síntoma: Docker Desktop está abierto, pero Ubuntu indica docker: command not found o no llega al daemon.
Activa Docker Desktop -> Settings -> General -> Use the WSL 2 based engine y
Settings -> Resources -> WSL Integration -> Ubuntu, aplica el cambio, ejecuta
wsl --shutdown en PowerShell y vuelve a abrir Ubuntu. docker version debe mostrar las secciones
Client y Server. No instales otro Docker Engine con apt.
WSL o Docker se queda sin memoria
Síntoma: el contenedor del colector termina o se reinicia en bucle, docker compose ... up --build
falla a mitad o docker info --format '{{.MemTotal}}' muestra bastante menos de 4 GB.
Causa: el backend WSL 2 de Docker Desktop está limitado por la máquina virtual de WSL; su límite predeterminado es una fracción de la RAM del host y puede ser bajo con otras distribuciones activas.
Cierra Docker Desktop, abre PowerShell y define un límite explícito:
@('[wsl2]', 'memory=4GB', 'processors=2') |
Set-Content -Encoding ascii "$env:USERPROFILE\.wslconfig"
wsl --shutdownInicia Docker Desktop, abre Ubuntu, vuelve a cargar .env.polymarket y ejecuta ./preflight.sh.
Un script informa /usr/bin/env: 'bash\r': No such file or directory
Síntoma: ./preflight.sh falla inmediatamente y el error contiene bash\r o ^M.
Causa: los finales de línea CRLF de Windows sustituyeron los LF requeridos, normalmente porque
core.autocrlf era true al clonar.
git config --global core.autocrlf input
git status --short
git add --renormalize .Revisa git status antes de descartar nada. Si el checkout no contiene trabajo necesario, un
clone limpio en ~/ClickHouse_Demos es la recuperación más segura.
El archivo de entorno tiene finales de línea de Windows
Síntoma: printf muestra un host plausible, pero ./preflight.sh o clickhouse client no puede
resolverlo, o el handshake TLS falla sin motivo visible.
Causa: .env.polymarket se guardó con un editor Windows y cada valor termina en retorno de carro.
set -a; source lo conserva y CLICKHOUSE_HOST se convierte en host\r.
sed -i 's/\r$//' .env.polymarket
set -a; source ./.env.polymarket; set +a
printf 'host=[%s]\n' "$CLICKHOUSE_HOST"
./preflight.shResultado esperado: el corchete de cierre queda justo tras el hostname, en la misma línea. Edita el archivo desde Ubuntu a partir de ahora.
El endpoint de salud no se abre en el navegador de Windows
Síntoma: curl http://localhost:8090/health funciona en Ubuntu, pero la misma URL falla en el navegador de Windows.
Causa: el reenvío de localhost de WSL se establece por inicio y puede perderse tras suspender o ejecutar wsl --shutdown.
Confirma primero el puerto desde Ubuntu; si el navegador sigue sin acceder, ejecuta wsl --shutdown
en PowerShell y vuelve a abrir Ubuntu:
curl --fail --silent http://localhost:8090/health | python3 -m json.toolEl terminal es la autoridad para cada verificación del taller; el navegador es una comodidad.
La red del aula bloquea Polymarket
Síntoma: el preflight no alcanza Gamma o la salud permanece degraded con errores de origen.
sed -i.bak 's/^POLYMARKET_MODE=.*/POLYMARKET_MODE=fixture/' .env.polymarket
set -a; source ./.env.polymarket; set +a
docker compose --env-file .env.polymarket up -d --build --force-recreate collector
curl --fail --silent http://localhost:8090/health | python3 -m json.toolResultado esperado: status es fixture; los datos crecen cada cinco segundos.
La salud indica websocket_stale_rest_active
Es recuperable mientras last_trade_reconcile_at y last_book_fallback_at sigan avanzando. El
colector se reconecta con backoff. No lo reinicies repetidamente.
docker compose --env-file .env.polymarket logs --tail=50 collector
sleep 35
curl --fail --silent http://localhost:8090/health | python3 -m json.toolUsa el modo fixture solo si ambos timestamps REST permanecen nulos u obsoletos.
La salud indica clickhouse_write_retrying o clickhouse_write_stalled
Mientras el proceso se ejecuta, el lote exacto permanece en memoria y se reintenta con el mismo token de deduplicación. Corrige los valores de Cloud, carga el archivo y recrea el colector:
${EDITOR:-vi} .env.polymarket
set -a; source ./.env.polymarket; set +a
./preflight.sh
docker compose --env-file .env.polymarket up -d --force-recreate collectorNo elimines las tablas; el reintento es seguro.
Una recreación forzada descarta los ticks que solo estaban en memoria. El colector reiniciado repuebla los libros actuales mediante REST y concilia operaciones públicas desde el último checkpoint confirmado. El taller no afirma tener una cola local duradera.
Aparece missing ClickHouse tables
Se omitió el Módulo 02 o se ejecutó contra otro servicio. Carga el archivo actual y comprueba:
set -a; source ./.env.polymarket; set +a
clickhouse client \
--host "$CLICKHOUSE_HOST" \
--port "$CLICKHOUSE_PORT" \
--user "$CLICKHOUSE_USER" \
--password "$CLICKHOUSE_PASSWORD" \
--secure \
--query "SHOW TABLES FROM polymarket"Vuelve al Módulo 02 si falta algún objeto.
La consulta de movimientos está vacía
Necesita observaciones a ambos lados de un límite de cinco minutos. Espera a que el colector lleve al menos seis minutos o usa el modo fixture en una clase con tiempo limitado.
El puerto 8090 ya está en uso
Cambia POLYMARKET_HEALTH_PORT en .env.polymarket, cárgalo y recrea:
sed -i.bak 's/^POLYMARKET_HEALTH_PORT=.*/POLYMARKET_HEALTH_PORT=8091/' .env.polymarket
set -a; source ./.env.polymarket; set +a
docker compose --env-file .env.polymarket up -d --force-recreate collector
curl --fail --silent http://localhost:8091/health | python3 -m json.tool