FROM ruby:3.2.2-slim # Fuso horário do container. # # POR QUE ISSO IMPORTA (caso real): a imagem sobe em UTC. O Rails até mostra a # hora certa (`config.time_zone = "America/Sao_Paulo"`), mas TUDO que é do # sistema operacional continuava 3h adiantado — timestamp de log, `date` nos # scripts de bin/ e, o pior, o CRON: `every "*/30 8-18"` no config/schedule.rb # rodava das 05h às 15h de Brasília, não das 08h às 18h. # # O cron do Debian lê `/etc/localtime`, não a variável TZ — por isso o symlink # além do ENV. Os dois juntos cobrem processo Ruby e daemon de cron. ENV TZ=America/Sao_Paulo ENV DEBIAN_FRONTEND=noninteractive # Dependências do sistema # tzdata: explícito de propósito. O zoneinfo já vem na imagem hoje, mas se um # rebuild futuro pegar uma base enxuta o symlink acima quebra em silêncio e a # hora volta a ficar errada — que é exatamente o bug que estamos fechando. RUN apt-get update -qq && apt-get install -y \ build-essential \ libpq-dev \ nodejs \ npm \ curl \ git \ libvips \ cron \ tzdata \ && ln -snf "/usr/share/zoneinfo/$TZ" /etc/localtime \ && echo "$TZ" > /etc/timezone \ && rm -rf /var/lib/apt/lists/* # Diretório da app WORKDIR /app # Instala gems COPY Gemfile Gemfile.lock* ./ RUN bundle install --jobs 4 --retry 3 # Copia o restante do código COPY . . # Assets NÃO são pré-compilados aqui, e a linha comentada foi removida para # ninguém "descomentar para resolver": o compose monta o projeto por cima # (`volumes: - ".:/app"`), então o public/assets gerado na imagem some no boot. # Quem pré-compila é bin/docker-boot, com o código que está de fato rodando. EXPOSE 3000 # O boot real (migrations, cron, servidor) mora em bin/docker-boot — ver os # comentários lá. CMD aqui é só o fallback de quem roda a imagem sem o compose. # (via `bash` — ver o motivo no docker-compose.yml) CMD ["bash", "bin/docker-boot"]