Corrige acesso em produção: hosts permitidos, i18n do Devise e config do ambiente no compose

- production.rb (hosts): a linha que parecia só liberar o APP_HOST na verdade
  LIGAVA a verificação de Host e recusava todo o resto — o acesso pelo IP
  interno caía em 'Blocked hosts: 100.75.222.23:3001'. Agora entram também
  localhost/127.0.0.1 e a lista HOSTS_PERMITIDOS.
- production.rb (i18n): 'fallbacks = true' significa cair no default_locale,
  que aqui é o próprio pt-BR — o fallback apontava para si mesmo e chave
  ausente virava 'Translation missing' na tela do usuário. Agora [:en], igual
  ao application.rb.
- pt-BR.yml: traduções do Devise (failure/sessions/passwords). O projeto não
  usa devise-i18n; em development o texto vinha em inglês pelo fallback e o
  buraco passava despercebido.
- docker-compose.yml / .env.example: porta do host parametrizada
  (${PORTA_APP:-3001}) e APP_HOST/APP_NAME/WHATSAPP_URL/HOSTS_PERMITIDOS com
  padrão — essa configuração vivia só no .env do servidor e sumiu junto com ele.
This commit is contained in:
2026-08-27 18:30:17 -03:00
parent a06f93784c
commit 7fa2336b35
4 changed files with 115 additions and 11 deletions

View File

@@ -8,8 +8,48 @@ pt-BR:
default: "%d/%m/%Y %H:%M"
short: "%d/%m %H:%M"
# Mensagem de login recusado para conta desativada (User#inactive_message).
# Sem esta chave, o Devise mostraria o símbolo cru "conta_desativada".
# ── Devise ────────────────────────────────────────────────────────────────
# POR QUE ESTÁ TUDO AQUI E NÃO SÓ A CHAVE DA CONTA DESATIVADA:
# o projeto não usa a gem `devise-i18n`, então as únicas traduções do Devise
# são estas. Em development a ausência passava despercebida porque o
# config/application.rb faz `i18n.fallbacks = [:en]` e o texto vinha em inglês
# do próprio gem. Em produção o `fallbacks` apontava para o pt-BR (ele mesmo)
# e a tela de login exibiu, para o usuário final:
# "Translation missing. Options considered were: pt-BR.devise.failure.unauthenticated"
# Traduzir de fato é melhor do que cair no inglês: quem usa o sistema é
# operador e motorista brasileiros.
devise:
failure:
already_authenticated: "Você já está autenticado."
inactive: "Sua conta ainda não foi ativada."
invalid: "%{authentication_keys} ou senha inválidos."
not_found_in_database: "%{authentication_keys} ou senha inválidos."
timeout: "Sua sessão expirou. Faça login novamente para continuar."
unauthenticated: "Para continuar, faça login."
# Conta desativada pelo administrador (User#inactive_message).
# Sem esta chave, o Devise mostraria o símbolo cru "conta_desativada".
conta_desativada: "Sua conta está desativada. Fale com um administrador."
sessions:
signed_in: "Login efetuado com sucesso."
signed_out: "Logout efetuado com sucesso."
already_signed_out: "Logout efetuado com sucesso."
passwords:
send_instructions: "Em alguns minutos você receberá um e-mail com instruções para redefinir sua senha."
send_paranoid_instructions: "Se o seu e-mail existir em nosso cadastro, você receberá um link para redefinir a senha."
updated: "Sua senha foi alterada com sucesso. Você já está autenticado."
updated_not_active: "Sua senha foi alterada com sucesso."
no_token: "Esta página só pode ser acessada pelo link do e-mail de redefinição de senha. Peça um novo link."
mailer:
reset_password_instructions:
subject: "Instruções para redefinir sua senha"
# Chaves que o Devise procura na RAIZ do locale (não dentro de `devise:`).
errors:
messages:
not_found: "não encontrado"
already_confirmed: "já foi confirmado, tente fazer login"
not_locked: "não está bloqueado"
expired: "expirou, solicite um novo"
not_saved:
one: "1 erro impediu que este %{resource} fosse salvo:"
other: "%{count} erros impediram que este %{resource} fosse salvo:"