2009-10-13 13 views
18

Hay un development_structure.sql dentro de la carpeta my/db de mi aplicación de rieles (rieles 2.3.4, ruby ​​1.8.7) y no estoy seguro exactamente de qué se trata.¿Qué es db/development_structure.sql en un proyecto de rieles?

  1. ¿Es necesario para un entorno específico? (Creo que leí en alguna parte que se usa para las pruebas)
  2. ¿Tengo que agregarlo a mi repositorio de git?
+1

¿Es esto lo mismo que structure.sql en los rieles 3? Si es así, esta pregunta debe ser editada –

+0

@boulder_ruby yes –

Respuesta

20

No debe agregarlo a su repositorio de git.

Es un archivo creado automáticamente por rails cuando ejecuta migraciones con su database.yml configurado para conectarse con una base de datos mysql. También se puede ver como una alternativa a schema.rb

Creo que se puede obligar a los carriles para crear añadiendo en su environment.rb:

config.active_record.schema_format = :sql 

Cuando está presente este archivo se utiliza, por ejemplo, por:

rake db:test:clone_structure 

Editar

sección pertinente en Ruby on Rails guías. http://guides.rubyonrails.org/migrations.html#schema-dumping-and-you

Recomiendan comprobarlo en el control de la fuente en la wiki.

Personalmente, me gusta mantenerlo fuera de él. Me gusta poder ejecutar todas las migraciones muy rápidamente. Para mí es una buena señal. Si las migraciones se vuelven lentas, siento que ya no tengo el control total de mi entorno. La lentitud en las migraciones generalmente significa que tengo una gran cantidad de datos en mi base de datos de desarrollo que me hacen sentir mal.

Sin embargo, parece ser una cuestión de gusto personal hoy en día. Sigue tus instintos en este caso.

+17

... excepto que * debes * agregarla a tu repositorio, al igual que deberías agregar schema.rb a tu repositorio. El objetivo de tener el archivo en el repositorio es que no tiene que ejecutar todas las migraciones al configurar un nuevo DB. –

+1

@ MarnenLaibow-Koser Lo tengo en mi repositorio y siempre está cambiando el valor de auto_increment de los ids, lo cual es bastante molesto – ecoologic

+1

@ecoologic Sí, eso puede ser un poco molesto. Esta es una de las razones por las que debe usar schema.rb en lugar de structure.sql, si es posible. Pero absolutamente debe estar en el repositorio. –

1

Se crea cuando ejecuta una tarea de rake para clonar su base de datos de desarrollo a su base de datos de prueba. La base de datos de desarrollo se envía a SQL, que luego se lee en su DB de prueba. Puedes eliminarlo de forma segura.

29

Esta publicación ha sido utilizada como referencia por un compañero de trabajo, pero las dos respuestas no son lo suficientemente exactas o informativas.

development_structure.sql es un volcado de bajo nivel del esquema, que es necesario cuando comienzas a utilizar las características de la base de datos propietaria, ya sea que quieras o no, vas a usarlas en algún momento.

En cuanto a la cuestión de almacenarlo o no, hay un poco de debate. Aquí hay una publicación informativa: http://www.saturnflyer.com/blog/jim/2010/09/14/always-check-in-schema-rb/. Y mi opinión sobre esto sigue.

El objetivo de development_structure.sql es sincronizar, para cualquier compromiso determinado, la estructura de la base de datos con el código, sin tener conocimiento previo de la estructura del esquema, es decir, sin tener que depender de un estado preexistente de el esquema para obtener el nuevo.

En pocas palabras, al tener una estructura de esquema disponible, siempre que cambie la bifurcación/confirmación, la carga directamente y la olvida. Esto es principalmente válido para proyectos dinámicos y "concurridos", donde diferentes ramas tienen diferencias en la estructura del esquema subyacente.

Sin tener la estructura de esquema almacenada, necesitarás usar siempre un esquema de referencia existente en tu base de datos, y migrarlo hacia adelante o hacia atrás cada vez que cambies una bifurcación/confirmación; varios casos del mundo real pueden hacer que este proceso sea ineficiente (por ejemplo, cuando otra sucursal no tiene algunas migraciones que actualmente tiene, o algunas migraciones no se pueden deshacer).

Otro problema son las construcciones automáticas, que sufren los mismos problemas, y lo que es peor, no pueden aplicar cambios manuales.

El único inconveniente es que requiere un cierto hábito, que es almacenarlo cada vez que ejecuta una migración. Fácil de decir, pero también fácil de olvidar.

No digo que no puedas vivir sin development_structure.sql - por supuesto que puedes. Pero si lo tiene, al cambiar de rama/confirmar, solo cargue y olvide; si no lo hace, puede que tenga que realizar una serie de pasos manuales.

0

En los carriles 3, que ni siquiera tiene que escribir esta línea,

config.active_record.schema_format =: sql

Puede generar este archivo structure.sql simplemente ejecutando el comando anterior rastrillo mencionado anteriormente

Cuestiones relacionadas