Purgar o volver a crear una base de datos de Ruby on Rails

Tengo una base de datos dev Ruby on Rails llena de datos. Quiero eliminar todo y reconstruir la base de datos. Estoy pensando en usar algo como:

rake db:recreate 

es posible?

Conozco dos formas de hacer esto:

Esto restablecerá su base de datos y volverá a cargar su esquema actual con todos:

 rake db:reset db:migrate 

Esto destruirá su db y luego lo creará y luego migrará su esquema actual:

 rake db:drop db:create db:migrate 

Todos los datos se perderán en ambos escenarios.

En Rails 4, todo lo que se necesita es

 $ rake db:schema:load 

Eso eliminaría todo el contenido de su base de datos y volvería a crear el esquema desde su archivo schema.rb, sin tener que aplicar todas las migraciones una por una.

Yo uso el siguiente trazador de líneas en la Terminal.

 $ rake db:drop && rake db:create && rake db:migrate && rake db:schema:dump && rake db:test:prepare 

Puse esto como un alias de shell y lo remigrate

Por ahora, puedes “encadenar” fácilmente las tareas de Rails:

 $ rake db:drop db:create db:migrate db:schema:dump db:test:prepare # db:test:prepare no longer available since Rails 4.1.0.rc1+ 

Actualización: con la llegada de Rails 5, se podrá acceder a este comando a través de este comando:

raíles db: purgar db: crear db: migrar RAILS_ENV = prueba


A partir de la versión más reciente de Rails 4.2 ahora puede ejecutar:

 rake db:purge 

Fuente: commit

 # desc "Empty the database from DATABASE_URL or config/database.yml for the current RAILS_ENV (use db:drop:all to drop all databases in the config). Without RAILS_ENV it defaults to purging the development and test databases." task :purge => [:load_config] do ActiveRecord::Tasks::DatabaseTasks.purge_current end 

Se puede usar en conjunto como se mencionó anteriormente:

 rake db:purge db:create db:migrate RAILS_ENV=test 

Dependiendo de lo que quieras, puedes usar …

rake db:create

… para construir la base de datos desde cero desde config/database.yml , o …

rake db:schema:load

… para construir la base de datos desde cero desde su archivo schema.rb .

Simplemente emita la secuencia de los pasos: suelte la base de datos, vuelva a crearla de nuevo, migre datos, y si tiene semillas, siembre la base de datos:

 rake db:drop db:create db:migrate db:seed 

Dado que el entorno predeterminado para rake es el desarrollo , en caso de que vea la excepción en las pruebas de especificación, debe volver a crear db para el entorno de prueba de la siguiente manera:

 RAILS_ENV=test rake db:drop db:create db:migrate 

En la mayoría de los casos, la base de datos de prueba se está sembrando durante los procedimientos de prueba, por lo que no es necesario pasar la acción de la tarea db:seed . De lo contrario, deberá preparar la base de datos:

 rake db:test:prepare 

o

 RAILS_ENV=test rake db:seed 

Además, para usar la tarea de recreación , puede agregar a Rakefile el siguiente código:

 namespace :db do task :recreate => [ :drop, :create, :migrate ] do if ENV[ 'RAILS_ENV' ] !~ /test|cucumber/ Rake::Task[ 'db:seed' ].invoke end end end 

Luego emita:

 rake db:recreate 

Desde la línea de comando ejecutar

 rake db:migrate:reset 

Usa como

 rake db:drop db:create db:migrate db:seed 

Todo en una línea. Esto es más rápido ya que el entorno no se vuelve a cargar una y otra vez.

db: drop – will drop database.

db: create – creará la base de datos (host / db / password se tomará de config / database.yml)

db: migrate – ejecutará las migraciones existentes desde el directorio (db / migration / .rb) *.

db: seed – ejecutará los datos de inicialización posibles desde el directorio (db / migration / seed.rb) ..

Por lo general, prefiero:

 rake db:reset 

hacer todo de una vez

¡Aclamaciones!

Puedes hacer manualmente:

 rake db:drop rake db:create rake db:migrate 

O simplemente rake db:reset , que ejecutará los pasos anteriores pero también ejecutará su archivo db/seeds.rb .

Un matiz añadido es que rake db:reset carga directamente desde su archivo schema.rb en lugar de ejecutar todos los archivos de migraciones nuevamente.

Sus datos quedan impactados en todos los casos.

Puede usar esta siguiente línea de comando:

 rake db:drop db:create db:migrate db:seed db:test:clone 

Para soltar una base de datos particular, puede hacer esto en la consola de Rails:

 $rails console Loading development environment 1.9.3 > ActiveRecord::Migration.drop_table(:) 1.9.3 > exit 

Y luego migrar DB nuevamente

 $bundle exec rake db:migrate 

En los Rails 4.2, para eliminar todos los datos pero preservar la base de datos

 $ bin/rake db:purge && bin/rake db:schema:load 

https://github.com/rails/rails/blob/4-2-stable/activerecord/CHANGELOG.md

Puede usar db:reset – para ejecutar db: drop y db: setup o db:migrate:reset – que ejecuta db: drop, db: create y db: migrate.

Dependiendo de lo que quiera usar, exista schema.rb

De acuerdo con la guía de Rails , este único trazador de líneas debería usarse porque se cargaría desde schema.rb lugar de volver a cargar los archivos de migración uno por uno:

 rake db:reset 

Porque en el desarrollo, siempre querrá recrear la base de datos, puede definir una tarea de rake en su carpeta lib / tasks así.

  namespace :db do task :all => [:environment, :drop, :create, :migrate] do end end 

y en la terminal se ejecutará

 rake db:all 

reconstruirá tu base de datos

Creo que la mejor manera de ejecutar este comando:

 **rake db:reset** it does db:drop, db:setup rake db:setup does db:create, db:schema:load, db:seed 

Simplemente puedes correr

rake db:setup

Soltará la base de datos, creará una nueva base de datos y poblará db desde la semilla si creó un archivo semilla con algunos datos.

Hoy hice bastantes cambios en el esquema de mis raíles. Me di cuenta de que necesitaba dos modelos adicionales en una jerarquía y algunos otros para eliminar. Hubo muchos pequeños cambios necesarios para los modelos y controladores.

Agregué los dos nuevos modelos y los creé, usando:

 rake db:migrate 

Luego edité el archivo schema.rb. Eliminé manualmente los modelos antiguos que ya no eran necesarios, cambié el campo de la clave externa como se requería y simplemente reordené un poco para que quede más claro para mí. Eliminé todas las migraciones y luego volví a ejecutar la comstackción a través de:

 rake db:reset 

Funcionó perfectamente. Todos los datos tienen que ser recargados, por supuesto. Rails se dio cuenta de que las migraciones habían sido eliminadas y restableció la marca de marea alta:

 -- assume_migrated_upto_version(20121026094813, ["/Users/sean/rails/f4/db/migrate"])