Rails e o Development Seed
Criado em: 05/07/2014
Você mudou de equipe e começou em um projeto novo, rodou bundle, migrate e iniciou o servidor. Criou uma conta neste novo sistema e… WTF este sistema faz?
É comum o projeto depender de algumas(muitas) informações para ele começar a mostrar estas informações ao invés de um monte de blank slates. Algumas destas informações algumas vezes são cadastradas apenas pela área administrativa do sistema. Como podemos deixar mais fácil a entrada de novos membros em um novo projeto?
No Rails podemos definir o nosso seed em db/seeds.rb
. Mas como queremos que nosso seed seja carregado apenas em desenvolvimento vamos criar um arquivo especifico para ele em db/seeds/development.rb
. Este arquivo não é carregado por padrão quando rodamos nosso seed, para fazer isso simplesmente o carregamos no nosso seed quando o ambiente for development.
E agora simplesmente criamos o nosso seed.
Como queremos que o seed seja executado apenas quando não tivermos estas informações verificamos por elas antes de criarmos utilizando o any?
. Criamos um pequeno método para gerar os posts, pois assim cada usuário não terá sempre o mesmo número de post para isso utilizamos o rand
. E como dica sempre use métodos que lance uma exceção em caso de erro pois se alguma validação falhar por exemplo temos o feedback mais rápido.
Seguindo esta prática você está ajudando a:
- Novas pessoas que entrarem no projeto
- Você mesmo quando precisar reiniciar o banco de dados ou trocar de máquina
Lembrando que sempre temos que revisitar estes seeds pois novos campos são adicionados no banco, novas validações e mesmo novos models que ainda não foram criados. Podemos revisitá-los quando rodamos o seed em algum momento ou quando uma nova pessoa entra no projeto e sente falta de alguma informação. Ela já pode contribuir gerando esta informação no seed.
Aprendi esta técnica enquanto trabalhava com o Fábio =)
Pode parecer uma boa ideia utilizar FactoryGirl, mas não é ;p saiba mais aqui.
Caso queira dados “mais reais” pode utilizar o faker.
Precisando de uma solução mais complexa de uma olhada no seedbank.
Comentários
Comentários powered by Disqus