# Ambientes

Mantenha a configuração e os dados de runtime de cada ambiente separados.

Um projeto normalmente roda em três ambientes: desenvolvimento na sua máquina, staging para revisão e produção. O código é o mesmo em todos; o que muda está no `.env`.

## Configurações por ambiente

| Configuração | Desenvolvimento | Staging | Produção |
|---|---|---|---|
| `APP_ENV` | `dev` | `stage` | `prod` |
| `SITE_URL` | `http://localhost` | o endereço de staging | o endereço público |
| `PEPPER` | próprio | próprio, ou o de produção quando o staging tem uma cópia dos dados | estável, nunca alterado |
| Configurações de e-mail | uma caixa de teste, ou nenhuma | uma caixa de teste | o remetente real |

O `APP_ENV` escolhe o arquivo de tarefas do agendador (`schedule.inc`, `schedule.stage.inc`, `schedule.prod.inc`) e liga as estatísticas de requisições em staging e produção. Mantenha cada `.env` fora do Git e na máquina a que pertence.

## Um site numa subpasta

Um site pode rodar num caminho, como `https://staging.example.com/project/`. Defina `BASE_PATH=/project/` no `.env`. Escreva os links internos com `[#base-url#]` nos templates e `nb.base_url` nos scripts, e os links no conteúdo a partir da raiz do site (`/contact`); o Nimbly acrescenta o caminho base quando a página é exibida.

## Dados entre ambientes

Registros, envios e conteúdo das páginas ficam em `ext/data/`. Escolha onde o conteúdo é editado:

- **Em desenvolvimento**, com commit em `ext/` e deploy como código. A produção não é usada como editor.
- **Em produção**, pelos editores. A agenda de produção então roda o `ext:sync`, que a cada hora faz commit das mudanças em `ext/` e as envia ao repositório, para que o próximo deploy parta delas e o desenvolvimento possa puxá-las.

Sessões, a fila de jobs, o estado do agendador, o histórico e os caches são dados de runtime. Eles ficam fora do Git e em cada ambiente.

## Sites de demonstração e de teste

Dê a um site de demonstração ou de teste seu próprio repositório `ext/`, com registros, mídia e usuários próprios, em vez de uma cópia de uma aplicação em produção. Nossa aplicação de demonstração funciona assim.

## Depois de um deploy

Verifique no próprio ambiente: o commit que está rodando, uma página que mudou, a versão da folha de estilo e o `./nimbly schedule:status` para o agendador.
