Pregunta Perdí mi schema.rb! Puede ser regenerado?


Debido a algunos problemas de implementación, detuve el seguimiento de schema.rb en git. De alguna manera lo he rellenado y en algún punto del camino mi archivo schema.rb ha desaparecido.

¿Hay alguna manera de regenerar schema.rb de la base de datos o de las migraciones? Preferiría no perder los datos existentes.


114
2018-03-16 03:48


origen


Respuestas:


Si ejecuta un rake -T enumerará todas las tareas de rake posibles para su proyecto Rails. Uno de ellos es db: schema: dump que recreará schema.rb para la aplicación Rails desde la base de datos.

bundle exec rake db:schema:dump

185
2018-03-16 03:52



Cuidadoso,

rake db:schema:dump

Vaciará el esquema DB actual DESDE el DB. Esto significa que si realizó algún cambio en sus migraciones, lo harán NO reflejarse en el archivo schema.rb que no es lo que quieres IMO.

Si desea volver a crear el esquema de las migraciones, haga lo siguiente:

rake db:drop  # ERASES THE DATABASE !!!! 
rake db:create
rake db:migrate

47
2018-03-13 09:21



rake db:schema:dump

Creo que esto sigue siendo válido en Rails 3 - regenera el schema.rb de la base de datos.


11
2018-03-16 03:52



RAILS 5 Vía:

rails db:schema:dump

o si tu Encuentro Gem :: LoadError entonces:

bundle exec rails db:schema:dump

Nota: 

en rieles 5, se recomienda que la tarea se genere / ejecute mediante el uso de rails en lugar de rake, esto es solo para recordar, los carriles generados son tareas de extensión .rake ver en lib/tasks/myTask.rake. lo que significa que estas tareas también se pueden ejecutar anteponiendo rake.


4
2018-03-15 07:39



Si regeneras schema.rb localmente, deberías estar bien. Simplemente contiene una representación de la estructura de las tablas de su base de datos. Los datos en sí no están contenidos en este archivo.

Para regenerar tu schema.rb archivo, ejecute:

bundle exec rake db:schema:dump

Entonces simplemente comprometa el nuevo schema.rb archivo y usted debe estar en buena forma!


3
2018-03-16 03:53



Directamente desde el archivo schema.rb mismo:

Si necesita crear la base de datos de la aplicación en otro   sistema, deberías estar usando db:schema:load, no ejecutando todas las migraciones   desde cero. Este último es un enfoque defectuoso e insostenible (más migraciones   acumularás, más lento se ejecutará y la mayor probabilidad de problemas).

Así que NO hagas la sugerencia de rake db:migrate, que fue sugerido en la - al momento de escribir este documento - la respuesta calificada más baja.


3
2017-08-08 00:13



También tuve un problema similar cuando mi esquema anterior no era refrescante, incluso si borraba la migración.

Entonces, lo que hice fue eliminar todas las tablas existentes en la base de datos y migrarlas de nuevo. Luego, ejecutar el comando "db: schema: load" me dio un nuevo schema.rb.

drop table my_table_name // deleted them indivisully
rake db:migrate
rake db:schema:dump // re-created a new schema

0
2017-10-17 02:18