Como reverter apenas uma etapa usando rake db: migrate


196

Depois de adicionar os arquivos de migração na db/migratepasta e executá-los rake db:migrate, quero voltar à etapa anterior, acho que usar VERSION=né a maneira certa de fazer isso, mas não sei o valor correto de n para usar. Existe algum comando para verificar o valor n atual?

Seria ótimo se alguém pudesse fornecer instruções completas sobre como usar rake db:migrate.

Respostas:


355

Para iniciantes

rake db:rollback você vai voltar um passo

então

rake db:rollback STEP=n

Irá reverter as nmigrações, onde nestá o número de migrações recentes que você deseja reverter.

Mais referências aqui .


95

Reverta a migração mais recente:

rake db:rollback

Reverta nas migrações mais recentes:

rake db:rollback STEP=n

Você pode encontrar instruções completas sobre o uso das tarefas de migração do Rails para rake no Guia do Rails para executar migrações .


Aqui está um pouco mais:

  • rake db:migrate - Execute todas as migrações que ainda não foram executadas
  • rake db:migrate VERSION=20080906120000 - Execute todas as migrações necessárias (para cima ou para baixo) para chegar à versão fornecida
  • rake db:migrate RAILS_ENV=test - Executar migrações no ambiente fornecido
  • rake db:migrate:redo - Reverta uma migração e execute-a novamente
  • rake db:migrate:redo STEP=n- Reverta as últimas nmigrações e execute-as novamente
  • rake db:migrate:up VERSION=20080906120000- Execute o upmétodo para a migração fornecida
  • rake db:migrate:down VERSION=20080906120000- Execute o downmétodo para a migração fornecida

E para responder à sua pergunta sobre de onde você obtém o número da versão da migração:

A versão é o prefixo numérico no nome do arquivo da migração. Por exemplo, para migrar para a versão 20080906120000, execute

$ rake db:migrate VERSION=20080906120000

(Da execução de migrações nos guias do Rails)


2
Quando o rake db: rollback não estava funcionando para reverter a migração mais recente, tive que usar o rake db: migrate VERSION = <segunda data da última versão> e funcionou bem #
Omni

8

A melhor maneira é executar a migração específica novamente usando para baixo ou para cima (nos trilhos 4. É mudança)

trilhos db: migrate: up VERSION = timestamp

Agora, como você obtém o timestamp. Vá para este caminho

/ db / migrate

Identifique o arquivo de migração que você deseja reverter. Escolha o carimbo de data e hora desse nome de arquivo.


Embora isso não responda à pergunta, é realmente o melhor caminho. A reversão de etapas pode causar erros, especialmente ao trabalhar com software em grupo.
steel

5

Se a versão for 20150616132425, use:

rails db:migrate:down VERSION=20150616132425

1

Outras pessoas já responderam a você como reverter, mas você também perguntou como identificar o número da versão de uma migração.

  • rake db:migrate:status fornece uma lista da versão, nome e status das migrações (para cima ou para baixo)
  • Você também pode encontrar o arquivo de migração, que contém um carimbo de data / hora no nome do arquivo, que é o número da versão. As migrações estão localizadas na pasta:/db/migrate

A propósito, se você executar o comando status, poderá ver linhas como: ********** NO FILE ********** Essas migrações não existem na sua ramificação atual se você usar git.
BjarneD
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.