PolymarketClickHouse Workshops

Solução de problemas do Polymarket

Recuperação exata de falhas de configuração, origem, coletor e ClickHouse.

Seu computador
Terminal do macOS: Execute os comandos do workshop no Terminal usando zsh ou bash.

Windows e WSL 2

Todas as entradas desta seção presumem o ambiente Windows compatível descrito em 00 Configuração: Ubuntu no WSL 2 com integração do Docker Desktop.

Um comando aparece como "não reconhecido" no PowerShell

Sintoma: o PowerShell rejeita ./preflight.sh, source, export ou outro comando do workshop.

Causa: o PowerShell serve apenas para a inicialização do WSL identificada no Módulo 00. Todos os comandos do workshop são executados dentro do Ubuntu.

Abra Ubuntu pelo menu Iniciar, volte ao diretório do laboratório e carregue novamente o arquivo de ambiente — um novo shell não o herda:

cd "$(git rev-parse --show-toplevel)/workshop_public/polymarket"
set -a; source ./.env.polymarket; set +a
./preflight.sh

O repositório está em /mnt/c

Sintoma: os bind mounts do Docker estão lentos, ./preflight.sh informa erro de permissão ou pwd começa com /mnt/c/Users/.

Causa: o clone foi criado no sistema de arquivos do Windows, e não no sistema Linux do WSL.

Clone uma cópia limpa no seu diretório home do Linux e transfira apenas o .env.polymarket preenchido:

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

O Ubuntu está executando como WSL 1

Sintoma: wsl --list --verbose mostra Ubuntu com VERSION 1, ou o Docker Desktop não consegue se integrar à distribuição.

No PowerShell como Administrador:

wsl --set-version Ubuntu 2
wsl --set-default-version 2
wsl --list --verbose

docker não está disponível no Ubuntu

Sintoma: o Docker Desktop está aberto, mas o Ubuntu informa docker: command not found ou não consegue acessar o daemon.

Ative Docker Desktop -> Settings -> General -> Use the WSL 2 based engine e Settings -> Resources -> WSL Integration -> Ubuntu, aplique a mudança, execute wsl --shutdown no PowerShell e reabra o Ubuntu. docker version deverá mostrar as seções Client e Server. Não instale um segundo Docker Engine com apt.

WSL ou Docker fica sem memória

Sintoma: o container do coletor é encerrado ou reinicia em loop, docker compose ... up --build falha durante o processo ou docker info --format '{{.MemTotal}}' mostra bem menos de 4 GB.

Causa: o backend WSL 2 do Docker Desktop é limitado pela máquina virtual do WSL, cujo limite padrão é uma fração da RAM do host e pode ser pequeno quando outras distribuições estão ativas.

Feche o Docker Desktop, abra o PowerShell e defina um limite explícito:

@('[wsl2]', 'memory=4GB', 'processors=2') |
  Set-Content -Encoding ascii "$env:USERPROFILE\.wslconfig"
wsl --shutdown

Inicie o Docker Desktop, reabra o Ubuntu, carregue .env.polymarket novamente e execute ./preflight.sh outra vez.

Um script informa /usr/bin/env: 'bash\r': No such file or directory

Sintoma: ./preflight.sh falha imediatamente e o erro contém bash\r ou ^M.

Causa: finais de linha CRLF do Windows substituíram os LF exigidos pelo repositório, normalmente porque core.autocrlf estava como true durante o clone.

git config --global core.autocrlf input
git status --short
git add --renormalize .

Revise git status antes de descartar qualquer coisa. Se o checkout não tiver trabalho necessário, um novo clone em ~/ClickHouse_Demos é a recuperação mais segura.

O arquivo de ambiente tem finais de linha do Windows

Sintoma: printf mostra um host plausível, mas ./preflight.sh ou clickhouse client não consegue resolvê-lo, ou o handshake TLS falha sem motivo visível.

Causa: .env.polymarket foi salvo por um editor Windows, então cada valor termina com um retorno de carro. set -a; source o mantém, e CLICKHOUSE_HOST se torna host\r.

sed -i 's/\r$//' .env.polymarket
set -a; source ./.env.polymarket; set +a
printf 'host=[%s]\n' "$CLICKHOUSE_HOST"
./preflight.sh

Esperado: o colchete de fechamento fica logo depois do hostname, na mesma linha. Daqui em diante, edite o arquivo dentro do Ubuntu.

O endpoint de saúde não abre no navegador do Windows

Sintoma: curl http://localhost:8090/health funciona no Ubuntu, mas a mesma URL falha no navegador do Windows.

Causa: o encaminhamento de localhost do WSL é estabelecido a cada inicialização e pode se perder depois de uma suspensão ou de wsl --shutdown.

Primeiro, confirme a porta no Ubuntu; se o navegador ainda não conseguir acessá-la, execute wsl --shutdown no PowerShell e reabra o Ubuntu:

curl --fail --silent http://localhost:8090/health | python3 -m json.tool

O terminal é a referência para todas as verificações do workshop; o navegador é apenas uma conveniência.

A rede da sala bloqueia o Polymarket

Sintoma: o preflight não acessa o Gamma ou a saúde permanece degraded com erros de origem.

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

Esperado: status é fixture; os dados crescem a cada cinco segundos.

A saúde mostra websocket_stale_rest_active

É recuperável enquanto last_trade_reconcile_at e last_book_fallback_at continuarem avançando. O coletor reconecta com backoff. Não o reinicie repetidamente.

docker compose --env-file .env.polymarket logs --tail=50 collector
sleep 35
curl --fail --silent http://localhost:8090/health | python3 -m json.tool

Use o modo fixture somente se os dois timestamps REST permanecerem nulos ou desatualizados.

A saúde mostra clickhouse_write_retrying ou clickhouse_write_stalled

Enquanto o processo estiver ativo, o lote exato permanece na memória e é tentado novamente com o mesmo token de deduplicação. Corrija os valores do Cloud, carregue o arquivo e recrie o coletor:

${EDITOR:-vi} .env.polymarket
set -a; source ./.env.polymarket; set +a
./preflight.sh
docker compose --env-file .env.polymarket up -d --force-recreate collector

Não remova as tabelas; a nova tentativa é segura.

Uma recriação forçada descarta ticks de cotação que ainda estavam apenas na memória. O coletor reiniciado repõe os livros atuais por REST e reconcilia negociações públicas desde o último checkpoint confirmado. O workshop não promete uma fila local durável.

A mensagem missing ClickHouse tables aparece

O Módulo 02 foi ignorado ou executado em outro serviço. Carregue o arquivo atual e confira:

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"

Volte ao Módulo 02 se faltar algum objeto.

A consulta de movimentos está vazia

Ela precisa de observações nos dois lados de um limite de cinco minutos. Aguarde o coletor executar por pelo menos seis minutos ou use o modo fixture em uma aula com tempo marcado.

A porta 8090 já está em uso

Mude POLYMARKET_HEALTH_PORT em .env.polymarket, carregue-o e recrie:

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

Nesta página

Acompanhar seu progresso?

Opcional. Enviaremos um link por e-mail para confirmar seu endereço; o progresso será registrado depois que você o abrir.

Use seu e-mail corporativo, não um endereço pessoal.

O acompanhamento do progresso também exige a aceitação dos Termos de Serviço atuais nas Configurações de privacidade.

PT