Atualização de Read.me e \correção da autorização no primeiro login

This commit is contained in:
2026-08-28 02:19:08 -03:00
parent ab126d13db
commit b20299dd6b
4 changed files with 222 additions and 6 deletions

View File

@@ -16,8 +16,10 @@
# gem nova no Gemfile não chega no container só com --build.
# 4. migrations — db:prepare: cria o banco se não existir, roda as migrations
# pendentes e só faz seed em banco recém-criado (idempotente).
# 5. cron — grava o crontab do config/schedule.rb e sobe o daemon.
# 6. Puma — processo em primeiro plano (é ele que segura o container).
# 5. assets — em production o Propshaft NÃO compila sob demanda: o
# arquivo digerido tem que estar em public/assets.
# 6. cron — grava o crontab do config/schedule.rb e sobe o daemon.
# 7. Puma — processo em primeiro plano (é ele que segura o container).
set -uo pipefail
log() { echo "[boot] $*"; }
@@ -85,7 +87,53 @@ for i in $(seq 1 $tentativas); do
sleep 6
done
# ── 5. Cron (best-effort) ────────────────────────────────────────────────────
# ── 5. Assets ────────────────────────────────────────────────────────────────
# POR QUE ISTO EXISTE: com RAILS_ENV=production — que é como o teste e o servidor
# rodam hoje — o Propshaft não serve asset dinamicamente. Ele resolve o caminho
# pelo public/assets/.manifest.json e quem entrega o arquivo é o servidor de
# estáticos; sem o arquivo em disco a requisição cai no roteador do Rails e volta
# 404 (a página public/404.html, não um erro de asset — por isso é difícil de
# reconhecer). Nada no deploy gerava esses arquivos: a linha do Dockerfile está
# comentada de propósito (o bind-mount `.:/app` do compose cobriria o que ela
# gerasse na imagem) e o boot não tocava no assunto. O que existia em
# public/assets no servidor era o resto de algum precompile manual antigo.
#
# CASO REAL (28/08/2026): o HTML pedia
# /assets/controllers/carrossel_controller-913b47f7.js e esse arquivo não existia
# mais -> 404 -> "Failed to fetch dynamically imported module" no console, com o
# carrossel (a paginação por tamanho de tela) e o editor de romaneio MORTOS no
# ambiente de teste. Só esses dois quebraram porque são os dois mais recentes:
# os outros dez controllers ainda vinham do cache do Cloudflare (max-age de 1
# ano), o que escondeu o problema por dias e fez parecer defeito de dois arquivos.
#
# A LIMPEZA ANTES do precompile é de propósito: sem ela um manifesto antigo
# convive com arquivos novos e a divergência volta na primeira alteração de JS.
# Assim manifesto e arquivos saem sempre da MESMA execução. É `rm -rf` e não
# `rails assets:clobber` porque faz exatamente o mesmo (essas duas pastas), sem
# pagar um boot inteiro do Rails só para apagar diretório.
if [ "${RAILS_ENV:-development}" = "production" ]; then
log "assets: limpando restos e pré-compilando (public/assets)"
rm -rf public/assets tmp/cache/assets
if bundle exec rails assets:precompile; then
log "assets prontos"
else
# NÃO sai com erro: sem JS o sistema fica ruim, mas ainda dá para entrar e
# ler os dados — e um `exit 1` aqui viraria loop de reinício com o
# `restart: unless-stopped`, deixando TODO MUNDO de fora. O aviso é gritado
# no log para não repetir a história de descobrir dias depois.
log "ERRO: assets:precompile falhou — o sistema vai subir SEM JS/CSS novos."
log " Rode 'docker compose exec app bundle exec rails assets:precompile'"
log " e veja o erro completo."
fi
else
# Em development o Propshaft calcula o digest do arquivo atual a cada
# requisição. Sobra de precompile faz ele voltar a resolver pelo manifesto, e
# aí toda alteração de JS/CSS só aparece depois de recompilar — parece que o
# navegador está com cache quando não está.
rm -rf public/assets
fi
# ── 6. Cron (best-effort) ────────────────────────────────────────────────────
# Best-effort de propósito: agendamento quebrado atrasa um relatório, mas NUNCA
# pode impedir o sistema de subir. As variáveis do banco chegam ao job pelo
# dotenv quando o rake carrega o Rails — o cron não precisa herdar o ENV.
@@ -95,6 +143,6 @@ else
log "AVISO: cron/crontab indisponível (rode com --build) — seguindo sem agendamento"
fi
# ── 6. Puma ──────────────────────────────────────────────────────────────────
# ── 7. Puma ──────────────────────────────────────────────────────────────────
log "subindo o Rails"
exec bundle exec rails s -b 0.0.0.0