Estou tentando executar apenas uma migração de um monte em meu aplicativo Rails. Como posso fazer isso? Não quero fazer nenhuma migração antes ou depois. Obrigado.
94
Estou tentando executar apenas uma migração de um monte em meu aplicativo Rails. Como posso fazer isso? Não quero fazer nenhuma migração antes ou depois. Obrigado.
STEP=n
argumento paradb:migrate
(onden
é o número de migrações a serem executadas, assim como existedb:rollback
) - então você poderia fazerrake db:migrate STEP=1
ourake db:migrate STEP=2
, etc.Respostas:
rake db:migrate:redo VERSION=xxxxxxx
, mas isso executará odown
e, em seguida, aup
etapa. Você pode fazer isso em conjunto com a observação da etapa de descida temporariamente.fonte
rake -T
.db:test:prepare
também não aparece nessa lista. Deus, estou atrasado para a festa.rake db:migrate:up VERSION=my_version
pode não fazer nada , porque a tabela schema_migrations ainda diz que foi executada. Na mesma situaçãorake db:migrate:redo VERSION=my_version
pode falhar porque não pode largar a mesa. Neste caso, comente odown
método na migração temporariamente e execute novamenterake db:migrate:redo...
da mesma forma
rake db:migrate:down
para eliminar uma migração específica. Você pode obter uma lista de tarefas de rake disponíveis comrake -T
.fonte
VERSION
mencionado aqui é o valor inteiro no início de cada um de seus arquivos de migração (que é apenas o carimbo de data / hora de quando foi criado). Por exemploVERSION=20150720023630
,.VERSION
é apenas uma variável de ambiente para que possa vir primeiro no comando ou mesmo configurada antes do comando:VERSION=1234567890 rake db:migrate:up
Tive que executar uma única migração que mudou e precisava ser executada novamente, independentemente de todas as outras migrações. Abra o console e faça o seguinte:
Mais útil, isso poderia ser colocado em uma tarefa de rake etc.
fonte
change
, execute em seuYourMigrations.migrate(:up)
lugar (ou:down
também!)require "#{Rails.root}/db/migrate/your_migrations.rb"
rake db:migrate:up VERSION=version_no
Irá migrar (adicionar) um script de migração específico
rake db:migrate:down VERSION=version_no
Irá deletar script de migração específico
fonte
tente.
fonte
VERSION
é apenas uma variável de ambiente para que possa vir primeiro no comando ou mesmo configurada antes do comando:VERSION=20098252345 rake db:migrate
Lembre-se de colocar aspas em torno de xxxx, xxxx é o carimbo de data / hora (ou ID de migração) para sua migração.
Você pode verificar os carimbos de data / hora (ID de migração) para as migrações anteriores feitas usando
fonte
Expandir a resposta por korch acima
require
não funcionou para mim, masload
funcionou. Para ser concreto, para o arquivo de migração:no console digitando
trabalhou para mim.
Isso foi para ruby 1.9.3p484 (2013-11-22 revisão 43786) [x86_64-linux] e Rails 3.2.13.
fonte
Adicionando meus 2 centavos a isso porque tive o mesmo problema:
Se você realmente deseja executar uma migração novamente sem criar uma nova, você pode fazer o seguinte:
rails dbconsole -p devdb=# delete from public.schema_migrations where version = '20150105181157';
E o rails "esquecerá" que executou a migração para 20150105181157. Agora, quando você executar db: migrate, ele executará novamente.
Isso quase sempre é uma má ideia. A única instância em que pode fazer sentido é se você tiver um branch de desenvolvimento e ainda não tiver desenvolvido sua migração e quiser adicionar algumas coisas a ela no desenvolvimento. Mas, mesmo assim, é melhor fazer sua migração bidirecional para que você possa reverter corretamente e tentar repetidamente.
fonte
Deve haver uma maneira de executar a classe de migração por meio do console. Não consigo fazer com que o código de migração seja reconhecível.
No entanto, como os comentários indicam, é preferível executar as migrações em ordem. Usar:
Copie e cole seu código na migração para script / console?
fonte
Eu tenho um método utilitário que torna isso muito fácil no desenvolvimento. Acho que isso me ajuda a evitar a criação de muitas migrações - normalmente, modifico as migrações até que sejam implantadas.
http://fullware.net/index.php/2011/05/26/easily-load-rails-migrations-for-console-execution/
fonte
Eu uso essa técnica no desenvolvimento quando mudo uma quantidade significativa de migração, e não quero migrar uma tonelada e perder nenhum dado ao longo do caminho (especialmente quando estou importando dados legados que levam muito tempo que Não quero ter que reimportar novamente).
Isso é 100% hackeado e eu definitivamente não recomendaria fazer isso na produção, mas funcionará:
fonte