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?
ruby-on-rails
ruby-on-rails-3
rake
Un aprendiz
fuente
fuente
rake db:drop db:create db:schema:load
podría ser más apropiado querake db:drop db:create db:migrate
(aunque estoy listo para estar equivocado al respecto).rake db:drop db:create db:migrate
db:drop + db:create + db:migrate == db:migrate:reset
. Por lo generaldb:schema:load
, recurro cuando las migraciones se rompen. Raramente necesito recrear la base de datos, por lo que la velocidad no importa mucho. Además, si tiene migraciones no aplicadasdb:schema:load
ydb:reset
no las aplicará. No estoy seguro si eso es un gran argumento.Respuestas:
Sé dos maneras de hacer esto:
Esto restablecerá su base de datos y volverá a cargar su esquema actual con todos:
Esto destruirá su base de datos y luego la creará y luego migrará su esquema actual:
Todos los datos se perderán en ambos escenarios.
fuente
rake db:reset
también ejecuta todas las migraciones (al menos en Rails 3), así que eso debería ser todo lo que se necesita, ¿verdad?rake db:test:prepare
prueba, o de lo contrario obtendrá un error como:Could not find table 'things' (ActiveRecord::StatementInvalid)
rake db:reset
yrake db:drop db:create db:migrate
hacer dos cosas completamente diferentes . Este último borra toda la base de datos de la aplicación, la recrea y luego pasa por cada migración para actualizar el esquema (db/schema.rb
odb/structure.sql
), pero no la llena con datos semilla. El primero, en cambio, es un alias pararake db:drop db:schema:load db:seed
, por lo que borra toda la base de datos de la aplicación, pero no actualiza el esquema , y luego se completa con datos semilla. Entonces, si no ha cambiado nada en sus migraciones, la primera es más rápida, la segunda es más segura.En Rails 4, todo lo que se necesita es
Eso eliminaría todo el contenido de su base de datos y volvería a crear el esquema de su archivo schema.rb, sin tener que aplicar todas las migraciones una por una.
fuente
db:drop
y fuidb:create
redundante.Yo uso el siguiente trazador de líneas en la Terminal.
Puse esto como un alias de shell y lo llamé
remigrate
Por ahora, puede "encadenar" fácilmente las tareas de Rails:
fuente
db:reset
, que es solo un Google (o consultar las Guías ) de distancia. Mi comentario no fue desaconsejar el uso de eso, sino evitar usardb:migrate
cuando lo que realmente quieres esdb:schema:load
.rake
, de este modo:rake db:drop db:create db:schema:load
.db:migrate
... mientras quedb:schema:load
es sensible a alguien que olvida comprobar schema.rb en el control de versiones junto con una nueva migración.Actualización: en 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 versión más reciente de rails 4.2, ahora puede ejecutar:
Fuente: commit
Se puede usar juntos como se mencionó anteriormente:
fuente
db:purge
"elimine todos los datos pero conserve todas las tablas y columnas"db:purge
no sirve para preservar las tablas.Dependiendo de lo que quieras, puedes usar ...
rake db:create
... para construir la base de datos desde cero
config/database.yml
, o ...rake db:schema:load
... para construir la base de datos desde cero desde su
schema.rb
archivo.fuente
Desde la línea de comando ejecutar
fuente
schema.rb
y si solodrop
ycreate
,migrate
no hará nada (probado en los rieles 6)Usar como
Todo en una linea. 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á una base de datos (host / db / contraseña se tomará de config / database.yml)
db: migrate: ejecutará las migraciones existentes desde el directorio (db / migration / .rb) *.
db: seed - ejecutará los datos de semillas posibles desde el directorio (db / migration / seed.rb) .
Generalmente prefiero:
hacer todo a la vez.
¡Salud!
fuente
db:reset == db:drop + db:schema:load + db:seed
,db:migrate:reset == db:drop + db:create + db:migrate
Simplemente emita la secuencia de los pasos: suelte la base de datos, luego vuelva a crearla, migre los datos y, si tiene semillas, siembre la base de datos:
Dado que el entorno predeterminado para el desarrollo
rake
es , en caso de que vea la excepción en las pruebas de especificaciones, debe volver a crear db para el entorno de prueba de la siguiente manera:En la mayoría de los casos, la base de datos de prueba se siembra durante los procedimientos de prueba, por
db:seed
lo que no es necesario pasar la acción de la tarea. De lo contrario, deberá preparar la base de datos:o
Además, para usar la tarea de recreación , puede agregar a Rakefile el siguiente código:
Luego emita:
fuente
Puedes hacer manualmente:
O simplemente
rake db:reset
, que ejecutará los pasos anteriores pero también ejecutará sudb/seeds.rb
archivo.Un matiz adicional es que
rake db:reset
carga directamente desde suschema.rb
archivo en lugar de ejecutar todos los archivos de migración nuevamente.Sus datos se vuelan en todos los casos.
fuente
Puede usar esta siguiente línea de comando:
fuente
Para descartar una base de datos en particular, puede hacer esto en la consola de rails:
Y luego migrar DB nuevamente
fuente
En rails 4.2, para eliminar todos los datos pero preservar la base de datos
https://github.com/rails/rails/blob/4-2-stable/activerecord/CHANGELOG.md
fuente
Puede usar
db:reset
- para ejecutar db: drop y db: setup odb:migrate:reset
- que ejecuta db: drop, db: create y db: migrate.dependiente en que desea utilizar existe schema.rb
fuente
De acuerdo con la guía de Rails , este forro debería usarse porque se cargaría desde el en
schema.rb
lugar de volver a cargar los archivos de migración uno por uno:fuente
Debido a que en el desarrollo, siempre querrá volver a crear la base de datos, puede definir una tarea de rastrillo en su carpeta lib / tareas de esa manera.
y en la terminal correrás
reconstruirá su base de datos
fuente
Creo que la mejor manera de ejecutar este comando:
fuente
Simplemente puedes correr
rake db:setup
Caerá la base de datos, creará una nueva base de datos y completará db desde la semilla si creó un archivo semilla con algunos datos.
fuente
3 opciones, mismo resultado:
1. Todos los pasos:
2. Restablecer:
3. Migrar: restablecer:
Notas:
fuente
Hoy he realizado algunos cambios en mi esquema de rieles. Me di cuenta de que necesitaba dos modelos adicionales en una jerarquía y algunos otros para ser eliminados. Se requirieron muchos pequeños cambios en los modelos y controladores.
Agregué los dos nuevos modelos y los creé, usando:
Luego edité el archivo schema.rb. Eliminé manualmente los modelos antiguos que ya no se requerían, cambié el campo de clave externa según fuera necesario y simplemente lo reordené un poco para aclararlo. Me eliminado todas las migraciones, y luego re-encontré con la acumulación a través de:
Funcionó perfectamente. Todos los datos tienen que recargarse, por supuesto. Rails se dio cuenta de que las migraciones se habían eliminado y restableció la marca de nivel superior:
fuente