2009-06-04 10 views
13

Recientemente agregué algunas funciones SQL a mi base de datos a través de una migración, y funcionan perfectamente bien. El código funciona, la base de datos funciona, las pruebas no. El archivo schema.rb me dice que está en la última versión (y es correcta), pero solo contiene definiciones para tablas e índices, no las funciones que agregué.¿Por qué Rake db: migrate in Rails no agrega funciones al archivo de esquema?

Agregué las funciones mediante el método "execute()" en mi migración, y las necesito en la base de datos de prueba para que pasen las pruebas RSpec (la política de la compañía dictamina que no puedo confirmar estos cambios hasta que esto se solucione) .

¿Alguien sabe por qué sucede esto o cómo solucionarlo? Puedo acceder manualmente a la línea de comando de MySQL y agregar las funciones, pero luego se borran la próxima vez que alguien haga un db: test: prepare. Necesito una solución que pueda automatizarse.

Gracias por cualquier ayuda y respuestas,

-Mike Trpcic

Respuesta

12

schema.rb es el formato de esquema Ruby y que no es compatible con las funciones o muchas otras características más avanzadas. Cambia el formato a SQL simple (en environment.rb) y deberías estar listo.

config.active_record.schema_format = :sql 

Editar: Después del comentario de Mike, hice un poco de excavación. La tarea Rake para volcar las llamadas al esquema en el adaptador de conexión ActiveRecord para MySQL y Oracle. MySQL no es muy inteligente y solo abandona la estructura de la tabla, haciendo caso omiso de todo lo demás. PostgreSQL, SQLite, SQL Server y Firebird llaman a un ejecutable provisto por un proveedor.

mysqldumpdoesn't support dumping stored procedures antes de la versión 5.0.13.

Miré alrededor del faro de Rails, pero buscar billetes abiertos es mucho más difícil de lo que debería ser. Si nadie más ha archivado un error al respecto, podría considerar hacerlo, aunque sin un parche, no es probable que alguien vaya a trabajar en ello.

+1

Steve, has encontrado toda la información que yo no pude. Muchas gracias, es bueno finalmente tener una respuesta. –

+0

Prefiero mirar el formato: ruby. Ojalá hubiera una forma de especificar que las migraciones específicas se ejecuten automáticamente cada vez que la base de datos se carga desde schema.rb. –

Cuestiones relacionadas