Variáveis de ambiente e configuração
Alguns valores não podem ser escritos dentro do seu código: chaves secretas, senhas de banco de dados, o endereço de um serviço. E alguns precisam mudar dependendo de onde o app está rodando. O código que você testa no seu notebook (o ambiente de dev, ou desenvolvimento) deve conversar com um banco de dados de teste; o app ao vivo que seus usuários acessam (o ambiente de prod, ou produção) precisa conversar com o banco real — usando o mesmo código.
A resposta são as variáveis de ambiente (frequentemente chamadas de "env vars"): valores nomeados que vivem fora do código e são fornecidos a ele quando é executado. O código diz "me dê DATABASE_URL," e o ambiente decide qual valor entregar.
# A config file (e.g. .env) — values live here, not in the code
DATABASE_URL=postgres://localhost/myapp_dev
STRIPE_SECRET_KEY=sk_test_51H... # dev = a test key
SEND_REAL_EMAILS=false # don't email real users while testing
Duas regras vão te poupar de dores de cabeça reais:
- Segredos nunca vão dentro do código. Qualquer coisa no seu código pode acabar se tornando pública (especialmente em um repositório compartilhado), e uma chave de pagamento ou senha de banco de dados vazada é uma emergência de verdade. Segredos pertencem às variáveis de ambiente, mantidos fora do controle de versão.
- Dev e prod são diferentes. O ponto é que o mesmo código se comporta corretamente em ambos, porque o ambiente — não o código — decide qual banco de dados e quais chaves usar.
O mesmo código, duas casas — as variáveis de ambiente são o que muda:
SAME CODE
/ \
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ DEV │ │ PROD │
│ your laptop │ │ hosting (cloud)│
│ test database │ │ real database │
│ test API key │ │ live API key │
│ fake emails │ │ real emails │
└─────────────────┘ └─────────────────┘
only you see it your users see it