Gerenciamento de migrations

Dada aquela premissa básica que nunca se deve alterar uma migration, e sim criar uma nova, como é feito pra gerenciar todo esse monte de migrations em um sistema grande que já existe há um tempo legal?

O que seria “gerenciar”? Você quer dar um fim nas migrations antigas?

Na verdade queria saber qual o procedimento utilizado, se é simplesmente deixado lá aquela montueira de migrations com o passar do tempo…

Normalmente eu deixo do jeito que está.

Uma vez eu apaguei as migrations antigas e deixei só a última. Essa última eu editei para fazer toda a criação de tabelas/indices/etc, e só seria executada em um banco recém criado.

A única vantagem que eu vi em fazer isso é que a criação do banco era mais rápida, por não precisar rodar várias migrations… mas fora isso, não vejo vantagem nenhuma.

[quote=Luizao]Normalmente eu deixo do jeito que está.

Uma vez eu apaguei as migrations antigas e deixei só a última. Essa última eu editei para fazer toda a criação de tabelas/indices/etc, e só seria executada em um banco recém criado.

A única vantagem que eu vi em fazer isso é que a criação do banco era mais rápida, por não precisar rodar várias migrations… mas fora isso, não vejo vantagem nenhuma.[/quote]

Mas esse processo de agrupamento das migrations, não é mt trabalhoso?

No meu caso foi complexo sim… porque nem tudo fica armazenado no schema (por exemplo, coisas específicas de banco, como triggers, procedures, etc), então tive que sair catando nas migrations esse tipo de coisa. Hoje nem penso em fazer isso de novo :wink:

Acho q não tem problemas deixar as migrations lá

Agora se tem muitos arquivos e vc quer criar as tabelas em um PC totalmente novo, tem o arquivo schema.rb pra isso, junto com as rake tasks que usam ele

Se você quiser, depois de um tempo pode matar as migrations mais antigas e só ficar com o schema.rb. Eu prefiro manter todas as migrations.

Tudo bem @j0nny?

Não vejo problemas em, a partir de certo ponto do projeto, usar um schema.rb como ponto de partida e continuar gerando migrações a partir dali. Mas dependendo do projeto, é interessante manter realmente todas as migrações, até por facilidade de “gerenciar” a evolução do banco.

Eu realmente não tenho certeza se o próprio Rails já não oferece uma solução automatizada para isso, pode ser que tenha e eu não conheça. Mas uma coisa que você pode fazer é criar subdiretórios em db/migrate (em qualquer lugar na verdade) e organizar as suas migrações mais antigas conforme desejar. Aí fica a seu critério, pode inclusive criar tasks para automatizar o processo certo?

Para adicionar outros diretórios com migrações no “load path” de migrations, você pode usar o seguinte código em seu arquivo Rakefile:

Mas como eu disse, talvez até já exista algo mais automatizado e bonito que isso.