O que o rake db: test: prepare realmente faz?

124

Estou acompanhando os vídeos do tutorial sobre trilhos e não consigo descobrir o que o db:test:preparecomando realmente faz. Alguém pode fornecer uma explicação?

benc
fonte

Respostas:

119

O rake db: migrate acima executa as migrações pendentes no ambiente de desenvolvimento e atualiza o db / schema.rb. O rake db: test: load recria o banco de dados de teste do db / schema.rb atual. Nas tentativas subseqüentes, é uma boa idéia executar o db: test: prepare, pois ele primeiro verifica se há migrações pendentes e o avisa adequadamente.

- http://guides.rubyonrails.org/testing.html

Basicamente, ele lida com a clonagem do banco de dados, para que você não precise executar as migrações no teste para atualizar o banco de dados de teste.

Richard Brown
fonte
19
rake db:test:prepareagora está obsoleto.
Jngai1297
3
acima url está morto, isso seria o novo github.com/rails/rails/blob/4-1-stable/activerecord/...
riffraff
12
e está de volta github.com/rails/rails/commit/…
fenec
4
@ Jngai1297 Já não!
Phillipp
1
@Phillipp mais uma vez Guides.rubyonrails.org/v5.0/…
yozzz
42

Especificamente, rake db:test:preparefará o seguinte:

  • Verifique se há migrações pendentes e,
  • carregar o esquema de teste

Ou seja, ele procurará no seu db/schema.rbarquivo para determinar se alguma migração existente no seu projeto não foi executada. Supondo que não haja migrações pendentes, ele esvaziará o banco de dados e o recarregará com base no conteúdo do db/schema.rbarquivo.

Kevin Bedell
fonte
2

rake db: test: prepare é uma boa solução para problemas de PG como este .

“PG :: UndefinedTable: ERROR: relacionamento não existe” com uma nomenclatura e convenção corretas do Rails "onde eu não poderia simplesmente executar rake db:migrate RAILS_ENV=production

Quando, por exemplo, você não pode criar um banco de dados de teste para um bug discutido aqui : "O PG indefinível tabela de erros de usuários não existe"

Todos apresentam esse erro "PG :: UndefinedTable: ERRO: a relação xxxxx não existe"

Albert Català
fonte