Perdí mi esquema.rb! ¿Se puede regenerar?


Debido a algunos problemas de implementación, dejé de seguir el esquema.rb en git. De alguna manera he rellenado esto y en algún lugar a lo largo del camino mi esquema.el archivo rb ha desaparecido.

Hay una forma de regenerar el esquema.rb de la base de datos o de las migraciones? Preferiría no perder los datos existentes.

Author: Mike Atlas, 2012-03-16

7 answers

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

bundle exec rake db:schema:dump
 189
Author: mguymon,
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-01-07 15:40:42

Cuidado,

rake db:schema:dump

Volcará el esquema actual de la base de datos DESDE la base de datos. Esto significa que si realizó cambios en sus migraciones, NO se reflejarán en el esquema.archivo rb que no es lo que desea IMO.

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

rake db:drop  # ERASES THE DATABASE !!!! 
rake db:create
rake db:migrate
 48
Author: gamov,
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-09-04 08:25:54
rake db:schema:dump

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

 11
Author: pschuegr,
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-03-16 03:52:29

RAILS 5 Way:

rails db:schema:dump

O si encuentras Gem:: LoadError entonces:

bundle exec rails db:schema:dump

Nota:

En rails 5 se recomienda que las tareas se generen/ejecuten usando rails en lugar de rake, esto es solo para recordar, las tareas generadas por rails son de extensión .rake ver en lib/tasks/myTask.rake. lo que significa que estas tareas también se pueden ejecutar anteponiendo rake.

 4
Author: Kaleem Ullah,
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-03-15 07:39:45

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 su archivo schema.rb, ejecute:

bundle exec rake db:schema:dump

Luego simplemente confirme el nuevo archivo schema.rb y ¡debería estar en buena forma!

 3
Author: Graham Swan,
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-03-16 03:53:22

Directamente desde el esquema.archivo rb en sí:

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

Así que NO haga la sugerencia de rake db:migrate, que se sugirió en la - en el momento de escribir este artículo - respuesta de menor calificación.

 3
Author: Colin Summers,
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-26 09:08:42

También tuve un problema similar en el que mi antiguo esquema no se actualizaba incluso si eliminaba la migración.

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

drop table my_table_name // deleted them indivisully
rake db:migrate
rake db:schema:dump // re-created a new schema
 0
Author: R.Cha,
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-10-17 02:18:00