ruby on rails 3 - ¿Hay una manera de tener automáticamente un "rake db: migrate RAILS_ENV=test" después de "rake db: migrate" en el entorno de desarrollo?
ruby-on-rails-3 testing (6)
¿Hay alguna forma de realizar automáticamente una rake db:migrate RAILS_ENV=test
después de cada rake db:migrate
rake db:migrate RAILS_ENV=test
en el entorno de desarrollo?
Tengo guard y guard-rspec ejecución, y estoy realmente molesto por las pruebas guard-rspec , incluso si funcionan manualmente en el navegador.
Me cuesta al menos 15 minutos cada vez que tengo una pausa en el desarrollo, descubrir que simplemente olvidé llamar rake db:migrate:test
después del cambio de la base de datos.
Como ya estoy usando Guard , también pensé en agregar guard-rake al proyecto, pero no sé qué archivo debería ver. Al ver development.sqlite3 , rake db:migrate RAILS_ENV=test
se rake db:migrate RAILS_ENV=test
cada vez que haga algo con mis registros a través del navegador, así que esto no es realmente lo que quiero.
¿Puede alguien ayudarme con mi problema?
En respuesta a su pregunta original sobre el uso de guard-rake
, puede ver db/schema.rb
, ya que esto se actualizará cada vez que migre la base de datos. Sin embargo, este archivo también se modificará si realiza una reversión, por lo que probablemente tendrá que extraer la versión de migración de la línea de definición de esquema en db/schma.rb
o usar rake db:test:prepare
lugar de rake db:migrate RAILS_ENV=test
.
Parece que esto es frágil, por lo que el uso de un alias de shell es probablemente el mejor enfoque. ¡Ojalá hubiera una mejor manera!
Más rápido: alias migrate=''rake db:migrate db:test:prepare''
(agregue esto en su .bashrc
, cargará Rails solo una vez)
Posiblemente solo haga un alias de comando en su archivo .bashrc
.
~ / .bashrc
alias rake_db_migrate=''rake db:migrate db:test:prepare''
Terminal
$ rake_db_migrate
Prefiero usar un alias de esta manera:
En tu ~/.bashrc
alias migrate=''rake db:migrate && rake db:test:prepare''
Es fácil pasar 30 minutos tratando de entender por qué sus pruebas no se pasan solo para recordar que no reinició la base de datos. Esto resolverá ese problema.
Una opción que me gusta bastante es anular la tarea real en otro script rake. Esto se invocará automáticamente después de ejecutar la migración. Así siempre creo un diagrama ERD después de migrar la base de datos:
# lib/tasks/database.rake
namespace :db do
desc ''Additional migrate task that creates the diagram''
task :migrate do
if Rails.env.development?
Rake::Task[''diagram:erd''].invoke
end
end
end
Así que en tu caso:
# lib/tasks/database.rake
namespace :db do
desc ''Additional migrate task that creates the diagram''
task :migrate do
`rake db:migrate RAILS_ENV=test`
end
end
Otro enfoque sería ejecutar lo siguiente, que clona su nuevo esquema a la base de datos de prueba:
rake db:migrate db:test:clone
Yo uso este alias:
alias rake_db_migrate=''rake db:migrate && rake db:migrate RAILS_ENV=test''
porque rake db:test:prepare
está en desuso.
La razón por la que uso esto es porque nuestro proyecto usa pg_search (postgreSQL) junto con structure.sql (no schema.rb) y, por alguna razón, ejecutar rake db:migrate
no prepara la base de datos de prueba.