Purgar o recrear una base de datos de Ruby on Rails


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

rake db:recreate

Es esto posible?

Author: random, 2010-11-07

18 answers

Conozco dos maneras de hacer esto:

Esto restablecerá su base de datos y recargará su esquema actual con todo:

rake db:reset db:migrate

Esto destruirá su base de datos y luego la creará y luego migrará su esquema actual:

rake db:drop db:create db:migrate

Todos los datos se perderán en ambos escenarios.

 979
Author: thenengah,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-04 02:13:52

En los carriles 4, todo lo necesario es

$ rake db:schema:load

Eso eliminaría todo el contenido de su BD y recrearía el esquema a partir de su esquema.archivo rb, sin tener que aplicar todas las migraciones una por una.

 146
Author: Eneko Alonso,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-20 04:09:55

Utilizo el siguiente liner en 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 nombré remigrate

Por ahora, puede fácilmente" encadenar " 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+
 39
Author: TK.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-26 14:50:06

Actualización: Con el advenimiento de Rails 5, este comando será accesible a través de este comando:

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


A partir de la última versión de rails 4.2 ahora puedes 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 pueden usar juntos como se mencionó anteriormente:

rake db:purge db:create db:migrate RAILS_ENV=test
 31
Author: Robbie Guilfoyle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-04 17:09:23

Dependiendo de lo que quieras, puedes usar {

rake db:create

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

rake db:schema:load

Build para construir la base de datos desde cero a partir de su archivo schema.rb.

 27
Author: coreyward,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-07 01:29:48

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

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

Dado que el entorno predeterminado para rake es development , en caso de que vea la excepción en las pruebas de especificaciones, debe volver a crear la bd para el entorno test 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 siembra durante los procedimientos de prueba, por lo que db:seed no es necesario pasar la acción de la tarea. 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 recrear 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

Entonces tema:

rake db:recreate
 11
Author: Малъ Скрылевъ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-28 07:52:52

Desde la línea de comandos ejecute

rake db:migrate:reset
 11
Author: user2747051,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-24 23:19:41

Use 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 recarga una y otra vez.

Db: drop - soltará la base de datos.

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/.po)*.

Db: seed - ejecutará los datos de seed posibles desde el directorio (db/migration/seed.rb) ..

Normalmente prefiero:

rake db:reset

Hacer todo a la vez.

Salud!

 11
Author: Manish Shrivastava,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-20 07:24:44

Puede 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 se carga directamente desde su archivo schema.rb en lugar de ejecutar todos los archivos de migraciones de nuevo.

Sus datos se quedan boquiabiertos en todos los casos.

 8
Author: Erik Trautman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-14 02:19:52

Puede usar la siguiente línea de comandos:

rake db:drop db:create db:migrate db:seed db:test:clone
 6
Author: user1358180,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-14 12:51:35

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

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

Y luego migrar DB de nuevo

$bundle exec rake db:migrate 
 4
Author: Kush,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-11-06 10:44:01

On 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

 4
Author: Yana Agun Siswanto,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-06 13:18:04

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

Dependiente en el que desea utilizar el esquema exist.rb

 3
Author: Aleksandr Babak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-06 02:26:03

De acuerdo con Rails guide , este liner debe usarse porque cargaría desde schema.rb en lugar de recargar los archivos de migración uno por uno:

rake db:reset
 2
Author: Victor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-01 08:10:51

Debido a que en desarrollo , siempre querrá volver a crear la base de datos,puede definir una tarea de rake en su carpeta lib/tasks como esa.

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

Y en terminal se ejecutará

rake db:all

Reconstruirá su base de datos

 1
Author: Obed Lorisson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-25 18:45:27

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
 1
Author: Thorin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-19 07:37:07

Simplemente puede ejecutar

rake db:setup

Soltará la base de datos, creará una nueva base de datos y rellenará la base de datos desde seed si creó el archivo seed con algunos datos.

 1
Author: Touseef Murtaza,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-27 09:47:49

Hoy he hecho bastantes cambios en mi esquema rails. Me di cuenta de que necesitaba dos modelos adicionales en una jerarquía y algunos otros para ser eliminados. Hubo muchos pequeños cambios requeridos en los modelos y controladores.

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

rake db:migrate

Luego edité el esquema.archivo rb. Eliminé manualmente los modelos antiguos que ya no eran necesarios, cambié el campo de clave externa según lo requerido y solo lo reordené un poco para hacerlo más claro a me. I suprimido todas las migraciones, y luego volver a ejecutar la compilació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 agua alta:

-- assume_migrated_upto_version(20121026094813, ["/Users/sean/rails/f4/db/migrate"])
 0
Author: ardochhigh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-26 11:12:32