version: '3.8' services: app: build: context: . dockerfile: Dockerfile ports: - "3000:3000" env_file: .env environment: DATABASE_URL: ${DATABASE_URL} DB_HOST: ${DB_HOST} DB_PORT: ${DB_PORT} DB_NAME: ${DB_NAME} DB_USER: ${DB_USER} DB_PASSWORD: ${DB_PASSWORD} SECRET_KEY_BASE: ${SECRET_KEY_BASE} RAILS_ENV: ${RAILS_ENV:-development} volumes: - ".:/app" - "bundle_cache:/usr/local/bundle" # No boot/deploy, em ordem: # 1. db:prepare — cria o banco se não existir, roda migrations pendentes e # só faz seed se o banco acabou de ser criado (idempotente, seguro). # 2. whenever --update-crontab — grava no crontab os jobs do config/schedule.rb # (ex.: atualizar histórico a cada 30 min, 08h-18h). # 3. cron — sobe o daemon de cron (em background) que executa esses jobs. # As variáveis de ambiente do banco vêm do .env via dotenv-rails quando # o rake carrega o Rails, então o cron não precisa herdar o ENV. # 4. rails s — sobe a aplicação (processo em primeiro plano). command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails db:prepare && bundle exec whenever --update-crontab && cron && bundle exec rails s -b 0.0.0.0" # O banco PostgreSQL já existe externamente. # Configure DB_HOST no .env com o IP/hostname do seu servidor PostgreSQL. volumes: bundle_cache: