2012-10-10 48 views
5

Tengo una aplicación de rieles que tiene una tabla particular donde los datos e incluso la estructura se generan dinámicamente fuera de los rieles y ruby. Esto es por diseño, es una tabla especial donde la estructura es independiente del resto de registros activos y relaciones. Los modelos que trabajan en él también son atómicos. De nuevo, todo por diseño y con propósito. No quiero una estructura específica para esta tabla, lo que significa que los nombres de columna y el número de columnas pueden cambiar cada vez que se inicializa la tabla. Si hay cambios en la estructura de la tabla, puedo administrar los cambios en mi clase de modelo.Rieles creando una tabla sin migración

Mi problema es que el proceso de migración de los rieles parece interponerse, y no quiero tener que seguir yendo y viniendo entre la migración y la reversión, solo para restablecer el estado de esta tabla.

El comportamiento que estoy buscando es literalmente cada vez que "genero" los datos para esta tabla. Quiero eliminar la tabla que ya existe (en todos los entornos: producción, desarrollo y prueba).

¿Hay alguna manera clara de eludir el proceso de migración? ¿O bien crea una migración especial que es independiente de la secuencia de otras migraciones en la aplicación?

Toda la base de datos no es desechable, pero esta tabla sí lo es.

¿Pensamientos sobre cómo podría lograr este comportamiento?

Rails 3, base de datos PostgreSQL, control de versiones Git, heroku alojamiento

Respuesta

2

Creo que la respuesta simple es "no utilizan las migraciones" - que están diseñados para ayudarle a relativamente con gracia extender un esquema de base de otra manera estática. Una migración hace muchas cosas más allá de generar/ejecutar el lenguaje de definición de datos (DDL) de su base de datos: sabe cómo avanzar y retroceder, sabe por un enlace entre el código fuente (schema.rb) y datos (en la tabla schema_migrations) cómo determinar qué migraciones se deben ejecutar, y así sucesivamente. Todo lo que necesita es la parte que ejecuta el DDL (que, después de todo, es solo un tipo de SQL).

Y al menos parte de esa parte es here in the TableDefinition API. Toda la infraestructura que pueda necesitar parece estar presente.

+0

supongo que realmente es así de simple. Gracias. –

2

Puede instalar esto como una tarea rake (suena como lo que lo está utilizando como) que contiene el SQL/carriles de comandos que se utilizan para construir la tabla, similar a lo que se hace con rake db:seed

+0

Eso funcionó Acabo de poner todo el código en una tarea de rake y puedo cambiarlo tantas veces como lo necesito. Gracias. –

Cuestiones relacionadas