Coloque os dados iniciais do banco de dados em uma migração

O RelayRobin é um produto implantável, mas a maioria dos sites lida com um problema semelhante: durante a implantação, alguns dados iniciais básicos devem ser propagados no banco de dados. Por exemplo, uma conta de amostra inicial para fazer login, alguns padrões de bootstrap, etc.

Costumávamos lidar com isso tendo um arquivo SQL de seed que rodaria automaticamente na instalação. Com o uso criterioso de INSERT IGNORE, poderíamos permitir que esse arquivo fosse executado novamente várias vezes com impunidade, para maior segurança.

Mas conforme o esquema mudou e evoluiu, isso criou dores de cabeça. Renomear uma coluna significaria que não apenas o código teria que ser alterado, mas também o arquivo SQL. E como esse script seria executado apenas na implantação inicial, era uma dor de testar e detectamos bugs causados ​​por esquecimento de atualizá-lo no teste de lançamento, em vez de antes mesmo de mesclar para master.

Então, acabamos de criar uma migração de banco de dados (usamos Phinx) que colocou todos os dados de semente no banco de dados de uma vez por todas e descartou o arquivo SQL init. Agora, quando adicionamos uma nova coluna ou renomeamos / reformatamos uma existente, os dados iniciais são atualizados continuamente como parte do conjunto de dados inteiro. Um código a menos para se preocupar.

Caveat emptor: ainda mantivemos o INSERT IGNOREpara evitar erros em instalações mais antigas; além disso, tornamos os IDs de dados de semente bem conhecidos e codificados, para que possamos aplicar algum tratamento especial apenas aos registros de semente ao longo da linha, se necessário.