Eu tenho o seguinte arquivo de migração db\migrate\20100905201547_create_blocks.rb
Como posso reverter especificamente esse arquivo de migração?
Eu tenho o seguinte arquivo de migração db\migrate\20100905201547_create_blocks.rb
Como posso reverter especificamente esse arquivo de migração?
Respostas:
rake db:rollback STEP=1
É uma maneira de fazer isso, se a migração que você deseja reverter for a última aplicada. Você pode substituir 1 por quantas migrações quiser voltar.
Por exemplo:
rake db:rollback STEP=5
Também reverterá toda a migração que ocorreu posteriormente (4, 3, 2 e também 1).
Para reverter todas as migrações de volta para (e incluindo) uma migração de destino, use: (Este comando corrigido foi adicionado APÓS todos os comentários apontando o erro na postagem original)
rake db:migrate VERSION=20100905201547
Para reverter APENAS UMA migração específica (FORA DE PEDIDO), use:
rake db:migrate:down VERSION=20100905201547
Observe que isso NÃO reverterá nenhuma migração intercalada - apenas a listada. Se não foi isso que você pretendia, é possível executar com segurança rake db:migrate
e ele será executado novamente apenas um, ignorando outros que não foram revertidos anteriormente.
E se você quiser migrar uma única migração fora de ordem, também há o inverso db:migrate:up
:
rake db:migrate:up VERSION=20100905201547
STEP=-1
. Eu fiz isso uma vez e ficou louco, revertendo tudo. Não é legal! Este foi o Rails 4.2 - acho que já pode ser corrigido agora.
rake db:migrate:down VERSION=20100905201547
reverterá o arquivo específico.
Para encontrar a versão de todas as migrações, você pode usar este comando:
rake db:migrate:status
Ou simplesmente o prefixo do nome do arquivo da migração é a versão que você precisa reverter.
Veja a entrada do guia Ruby on Rails sobre migrações.
Para reverter a última migração, você pode fazer:
rake db:rollback
Se você deseja reverter uma migração específica com uma versão, faça:
rake db:migrate:down VERSION=YOUR_MIGRATION_VERSION
Por exemplo, se a versão for 20141201122027, você fará:
rake db:migrate:down VERSION=20141201122027
para reverter essa migração específica.
Você pode reverter sua migração usando rake db:rollback
com opções diferentes. A sintaxe será diferente de acordo com seus requisitos.
Se você deseja reverter apenas a última migração, poderá usar
rake db:rollback
ou
rake db:rollback STEP=1
Se você deseja reverter o número de migrações de uma só vez, basta passar um argumento:
rake db:rollback STEP=n
onde n
é o número de migrações para reversão, contando desde a migração mais recente.
Se você deseja reverter para uma migração específica, deve passar a versão da migração da seguinte maneira:
rake db:migrate:down VERSION=xxxxx
onde xxxxx é o número da versão da migração.
rake db:migrate:down VERSION=your_migrations's_version_number_here
A versão é o prefixo numérico no nome do arquivo da migração
Como encontrar a versão :
Seus arquivos de migração são armazenados no seu rails_root/db/migrate
diretório. Encontre o arquivo apropriado até o qual deseja reverter e copie o número do prefixo.
por exemplo
nome do arquivo: 20140208031131_create_roles.rb
a versão é20140208031131
rake db:migrate:status
Revertendo a última migração:
# rails < 5.0
rake db:rollback
# rails >= 5.0
rake db:rollback
# or
rails db:rollback
Revertendo o último n
número de migrações
# rails < 5.0
rake db:rollback STEP=2
# rails >= 5.0
rake db:rollback STEP=2
# or
rails db:rollback STEP=2
Retrocedendo uma Migração Específica
# rails < 5.0
rake db:migrate:down VERSION=20100905201547
# rails >= 5.0
rake db:migrate:down VERSION=20100905201547
# or
rails db:migrate:down VERSION=20100905201547
Para reverter a última migração, você pode fazer:
rake db:rollback
Se você deseja reverter uma migração específica com uma versão, faça:
rake db:migrate:down VERSION=YOUR_MIGRATION_VERSION
Se o arquivo de migração que você deseja reverter foi chamado db/migrate/20141201122027_create_some_table.rb
, a VERSÃO dessa migração será20141201122027
, que é o carimbo de data e hora de quando essa migração foi criada e o comando para reverter essa migração seria:
rake db:migrate:down VERSION=20141201122027
Para reverter todas as migrações até uma versão específica (por exemplo 20181002222222
), use:
rake db:migrate VERSION=20181002222222
(Observe que isso é usado db:migrate
- não db:migrate:down
como em outras respostas a esta pergunta.)
Supondo que a versão de migração especificada seja anterior à versão atual, isso reverterá todas as migrações até, mas não incluindo, a versão especificada.
Por exemplo, se for rake db:migrate:status
exibido inicialmente:
(... some older migrations ...)
up 20181001002039 Some migration description
up 20181002222222 Some migration description
up 20181003171932 Some migration description
up 20181004211151 Some migration description
up 20181005151403 Some migration description
Corrida:
rake db:migrate VERSION=20181002222222
Vai resultar em:
(... some older migrations ...)
up 20181001002039 Some migration description
up 20181002222222 Some migration description
down 20181003171932 Some migration description
down 20181004211151 Some migration description
down 20181005151403 Some migration description
Referência: https://makandracards.com/makandra/845-migrate-or-revert-only-some-migrations
Do Guia Rails
Você pode usar a capacidade do Active Record para reverter migrações usando o revert
método:
require_relative '20100905201547_create_blocks'
class FixupCreateBlock < ActiveRecord::Migration
def change
revert CreateBlock
create_table(:apples) do |t|
t.string :variety
end
end
end
O revert
método também aceita um bloco de instruções para reverter. Isso pode ser útil para reverter partes selecionadas de migrações anteriores. Por exemplo, vamos imaginar que o CreateBlock seja confirmado e mais tarde seja decidido que seria melhor usar as validações do Active Record, no lugar da restrição CHECK, para verificar o CEP.
class DontUseConstraintForZipcodeValidationMigration < ActiveRecord::Migration
def change
revert do
# copy-pasted code from CreateBlock
reversible do |dir|
dir.up do
# add a CHECK constraint
execute <<-SQL
ALTER TABLE distributors
ADD CONSTRAINT zipchk
CHECK (char_length(zipcode) = 5);
SQL
end
dir.down do
execute <<-SQL
ALTER TABLE distributors
DROP CONSTRAINT zipchk
SQL
end
end
# The rest of the migration was ok
end
end
end
A mesma migração também poderia ter sido escrita sem o uso de reversão, mas isso envolveria mais algumas etapas: reverter a ordem de create_table e reversible, substituir create_table por drop_table e finalmente substituir up por down e vice-versa. Tudo isso é resolvido por reversão.
As migrações alteram o estado do banco de dados usando o comando
$ bundle exec rake db:migrate
Podemos desfazer uma única etapa de migração usando
$ bundle exec rake db:rollback
Para voltar ao começo, podemos usar
$ bundle exec rake db:migrate VERSION=0
Como você pode imaginar, a substituição de qualquer outro número por 0 migra para esse número de versão, onde os números de versão vêm listando as migrações sequencialmente
Bem, no Rails 5 é bastante fácil o rake db: migrate: status ou o rails db: migrate: status
Foi modificado para lidar da mesma maneira. Em seguida, escolha a versão que você deseja reverter e execute o rake db: migrate VERSION = 2013424230423
Verifique se VERSION possui todas as letras maiúsculas
Se você tiver algum problema com alguma etapa da migração ou ficar preso no meio, simplesmente vá para o arquivo de migração e comente as linhas que já foram migradas.
espero que ajude
Class.down
stackoverflow.com/questions/753919/run-a-single-migration-file