Eu tenho um banco de dados de desenvolvimento Ruby on Rails cheio de dados. Quero excluir tudo e reconstruir o banco de dados. Estou pensando em usar algo como:
rake db:recreate
Isso é possível?
ruby-on-rails
ruby-on-rails-3
rake
Um aprendiz
fonte
fonte
rake db:drop db:create db:schema:load
pode ser mais apropriado do querake db:drop db:create db:migrate
(embora eu esteja pronto para estar errado sobre isso).rake db:drop db:create db:migrate
db:drop + db:create + db:migrate == db:migrate:reset
. Eu costumo recorrerdb:schema:load
, quando as migrações são interrompidas. Raramente preciso recriar o banco de dados, portanto a velocidade não importa muito. Além disso, se você tiver migrações não aplicadasdb:schema:load
edb:reset
não as aplicará. Não tenho certeza se isso é um grande argumento.Respostas:
Conheço duas maneiras de fazer isso:
Isso redefinirá seu banco de dados e recarregará seu esquema atual com todos:
Isso destruirá seu banco de dados e, em seguida, criará e migrará seu esquema atual:
Todos os dados serão perdidos nos dois cenários.
fonte
rake db:reset
também executa todas as migrações (pelo menos no Rails 3), então isso deve ser tudo o que é necessário, certo?rake db:test:prepare
testes ou obterá um erro como:Could not find table 'things' (ActiveRecord::StatementInvalid)
rake db:reset
erake db:drop db:create db:migrate
fazer duas coisas totalmente diferentes . O último apaga todo o banco de dados do aplicativo, o recria e depois passa por todas as migrações para atualizar o esquema (db/schema.rb
oudb/structure.sql
), mas não o preenche com dados iniciais. O primeiro é um alias pararake db:drop db:schema:load db:seed
, portanto, elimina todo o banco de dados do aplicativo, mas não atualiza o esquema e, em seguida, preenche com dados iniciais. Portanto, se você não alterou nada em suas migrações, a primeira é mais rápida e a segunda é mais segura.No Rails 4, tudo o que é necessário
Isso excluiria todo o conteúdo do seu banco de dados e recriaria o esquema do arquivo schema.rb, sem a necessidade de aplicar todas as migrações uma a uma.
fonte
db:drop
e fuidb:create
redundante.Eu uso o seguinte liner no Terminal.
Coloquei isso como um apelido de shell e o nomeei
remigrate
Até agora, você pode facilmente "encadear" tarefas do Rails:
fonte
db:reset
, que fica a apenas um Google (ou consulte os Guias ). Meu comentário não foi contra isso, mas para evitardb:migrate
quando o que você realmente quer édb:schema:load
.rake
, assim:rake db:drop db:create db:schema:load
.db:migrate
... enquantodb:schema:load
é sensível a alguém que esquece de verificar o schema.rb no controle de versão ao lado de uma nova migração.Atualização: No Rails 5, este comando estará acessível através deste comando:
rails db:purge db:create db:migrate RAILS_ENV=test
A partir da versão mais recente do rails 4.2, agora você pode executar:
Fonte: commit
Pode ser usado em conjunto, como mencionado acima:
fonte
db:purge
"remova todos os dados, mas preserve todas as tabelas e colunas"db:purge
não está preservando as tabelas.Dependendo do que você está querendo, você pode usar…
rake db:create
… Para construir o banco de dados a partir do zero
config/database.yml
ou…rake db:schema:load
… Para construir o banco de dados do zero a partir do seu
schema.rb
arquivo.fonte
Na linha de comando, execute
fonte
schema.rb
e, se você apenasdrop
ecreate
,migrate
não fará nada (testado nos trilhos 6)Use como
Tudo em uma linha. Isso é mais rápido, pois o ambiente não é recarregado novamente.
db: drop - descartará o banco de dados.
db: create - criará o banco de dados (host / db / password será obtido em config / database.yml)
db: migrate - executará migrações existentes do diretório (db / migration / .rb) *.
db: seed - executará os dados da semente possíveis no diretório (db / migration / seed.rb) .
Eu geralmente prefiro:
fazer tudo de uma vez.
Felicidades!
fonte
db:reset == db:drop + db:schema:load + db:seed
,db:migrate:reset == db:drop + db:create + db:migrate
Emita apenas a sequência das etapas: descarte o banco de dados, recrie-o novamente, migre dados e, se houver sementes, semeie o banco de dados:
Como o ambiente padrão para o desenvolvimento
rake
é , se você vir a exceção nos testes de especificação, recrie o db para o ambiente de teste da seguinte maneira:Na maioria dos casos, o banco de dados de teste está sendo semeado durante os procedimentos de teste, portanto,
db:seed
não é necessário que a ação da tarefa seja aprovada. Caso contrário, você deve preparar o banco de dados:ou
Além disso, para usar a tarefa de recriação , você pode adicionar ao Rakefile o seguinte código:
Emita então:
fonte
Você pode fazer manualmente:
Ou apenas
rake db:reset
, que executará as etapas acima, mas também executará seudb/seeds.rb
arquivo.Uma nuance adicional é que é
rake db:reset
carregado diretamente do seuschema.rb
arquivo, em vez de executar todos os arquivos de migração novamente.Seus dados são surpreendidos em todos os casos.
fonte
Você pode usar esta seguinte linha de comando:
fonte
Para eliminar um banco de dados específico, você pode fazer isso no console do Rails:
E depois migre o DB novamente
fonte
No trilhos 4.2, para remover todos os dados, mas preservar o banco de dados
https://github.com/rails/rails/blob/4-2-stable/activerecord/CHANGELOG.md
fonte
Você pode usar
db:reset
- para executar db: drop e db: setup oudb:migrate:reset
- que executa db: drop, db: create e db: migrate.depende em que você deseja usar o exist schema.rb
fonte
De acordo com o guia do Rails , esse liner deve ser usado porque seria carregado a partir do em
schema.rb
vez de recarregar os arquivos de migração, um por um:fonte
Como no desenvolvimento, você sempre desejará recriar o banco de dados, pode definir uma tarefa rake na sua pasta lib / tasks assim.
e no terminal você vai correr
ele irá reconstruir seu banco de dados
fonte
Eu acho que a melhor maneira de executar este comando:
fonte
Simplesmente você pode executar
rake db:setup
Ele eliminará o banco de dados, criará um novo banco de dados e preencherá o banco de dados a partir da semente se você criou o arquivo de semente com alguns dados.
fonte
3 opções, mesmo resultado:
1. Todas as etapas:
2. Redefinir:
3. Migrar: redefinir:
Notas:
fonte
Hoje fiz algumas mudanças no meu esquema de trilhos. Percebi que precisava de mais dois modelos em uma hierarquia e alguns outros a serem excluídos. Foram necessárias muitas pequenas alterações nos modelos e controladores.
Eu adicionei os dois novos modelos e os criei, usando:
Depois editei o arquivo schema.rb. Eu removi manualmente os modelos antigos que não eram mais necessários, alterei o campo de chave estrangeira conforme necessário e apenas o reordenei um pouco para torná-lo mais claro. I eliminado todas as migrações, em seguida, re-correu a compilação via:
Funcionou perfeitamente. Todos os dados precisam ser recarregados, é claro. Os Rails perceberam que as migrações haviam sido excluídas e redefiniram a marca d'água máxima:
fonte