PolymarketClickHouse Workshops

Resolución de problemas de Polymarket

Recuperación exacta de fallos de configuración, origen, colector y ClickHouse.

Tu equipo
Terminal de macOS: Ejecuta los comandos del taller en Terminal con zsh o bash.

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.sh

El 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.polymarket

Ubuntu 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 --verbose

docker 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 --shutdown

Inicia 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.sh

Resultado 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.tool

El 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.tool

Resultado 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.tool

Usa 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 collector

No 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

En esta página

¿Quieres seguir tu progreso?

Opcional. Enviaremos un enlace por correo para confirmar tu dirección; el progreso se registrará cuando lo abras.

Usa tu correo de trabajo, no uno personal.

Para seguir el progreso también debes aceptar los Términos del servicio actuales en la Configuración de privacidad.

ES