database - tutorial - cakephp cms
Buenas migraciones de base de datos para CakePHP? (5)
He estado probando algunos scripts de migración para CakePHP pero me encontré con problemas con todos los de alguna forma u otra.
Por favor, aconséjeme sobre una opción de migración para Cake que use en vivo y sepa que funciona.
Me gustaría las siguientes "características":
- Compatibilidad con CakePHP 1.2 (por ejemplo, las migraciones de CakeDC solo serán una opción cuando 1.3 sea estable y mi aplicación haya migrado al nuevo código base)
- Soporte para (o al menos no detener) Modelos con una configuración de base de datos diferente.
- Modelos de soporte en subcarpetas de aplicación / modelos
- Modelos de soporte en complementos
- Soporta tablas que no cumplen con las convenciones de Cake (tengo algunas tablas especiales que no tienen un solo campo de clave principal y necesito mantenerlas)
- Juega bien con el despliegue automatizado a través de Capistrano y Git.
No necesito archivos versionados estilo rieles, un archivo de esquema versionado de git que se compara en vivo con el esquema existente funcionará. Es decir: Me gusta el SchemaShell in Cake, aparte de que no es compatible con la mayoría de mis requisitos anteriores.
He mirado y probado:
- CakePHP Schema Shell http://book.cakephp.org/view/734/Schema-management-and-migrations
- Migraciones de CakeDC http://cakedc.com/downloads/view/cakephp_migrations_plugin
- Migraciones YAML http://github.com/georgious/cakephp-yaml-migrations-and-fixtures
- migraciones de joelmoss http://code.google.com/p/cakephp-migrations
He utilizado el plugin de migraciones CakeDC para 1.3.xy 2.x en entornos de producción y estoy satisfecho. Hay algunos errores relacionados con la creación de migraciones en la versión 1.3.x, pero son fáciles de solucionar.
Si le gustan las migraciones de Rails, use Rails Migrations ... eche un vistazo a esta joya https://github.com/thuss/standalone-migrations . Yo uso esta gema con cakephp en mi trabajo diario.
Tengo un plugin que llega a CakePHP 1.2, se puede ver en http://github.com/jrbasso/migrations
Utiliza el estilo de pastel para hacer todas las cosas. No usa yaml, usa objetos para definir tablas. Puedes importar modelos de Cake sin problemas ...
Trataré de actualizar este "tema" con mis hallazgos después de probar rápidamente el complemento de Juan y todos los demás mencionados excepto el de CakeDC ... ya que no tengo la aplicación relevante actualizada para CakePHP 1.3 y ese complemento de migración requiere 1.3
Debo tener en cuenta que los comentarios sobre fallas y los complementos que no funcionan para mí se deben leer principalmente como "no adecuados para MIS necesidades" o "errores que he cometido al intentarlos". Hasta cierto punto, algunos pueden leer dichos comentarios como una petición de revisión en la documentación. No quiero decir que los complementos probados tengan defectos inherentes, estén defectuosos o estén dañados. Estoy seguro de que todos ellos trabajan en las circunstancias adecuadas y para los flujos de trabajo correctos.
ShellPHP Schema Shell
Tiene el concepto simple que me gusta. El esquema está vinculado al código y el SCM se utiliza para administrar sus revisiones.
Funciona muy bien a un punto. Ese punto es:
No parece adecuado para el despliegue automatizado. Es decir, el comando de actualización solo puede modificar tablas, no manejar tablas nuevas o eliminadas. Esos son manejados por sus propios comandos de shell, lo que complica la implementación al estilo de Cap. También la ejecución de actualizaciones con una nueva tabla producirá errores cuando la secuencia de comandos intente "Modificar" la tabla no existente. Estoy seguro de si esto es para un problema o un problema que estoy teniendo. (Han preguntado en el grupo de google sin respuesta todavía)
Migraciones de CakeDC
- Parece que tomaron el Schema Shell y lo "arreglaron". Los documentos explican un procedimiento un poco más complicado (al menos para explicar), pero podría funcionar como yo quisiera.
YAML, joelmoss y las migraciones de juan.
Todos estos comparten el concepto de rieles de archivos versionados y "aumento" y "derribo" entre ellos. Esto me gusta menos porque no puedo ver una situación para mis proyectos cuando la migración de un esquema se actualizaría o revertiría sin hacer lo mismo con el código fuente. También puedo vivir sin la capacidad de migrar datos existentes en una secuencia de comandos de migración, ya que lo preveo como algo muy raro para mí.
Todos estos esperan que no toque la base de datos a través de ningún otro medio que no sean los scripts de migración. No puedo abrir mi MySql-GUI favorita y jugar hasta que esté feliz y luego generar un "dif" a través de estos scripts. (Al menos no he encontrado formas documentadas de hacerlo durante mis pruebas breves). Tengo que escribir manualmente los cambios en los archivos YAML o PHP. Ya que estoy comenzando un proyecto existente con alrededor de 30 tablas, no disfruto la idea de volver a escribir ese esquema manualmente. Pero algunos de estos complementos no crearon un buen archivo de puntos de inicio con todas mis tablas. Esto probablemente también se debió a mis pruebas breves y / o incapacidad para encontrar documentación para tal característica. No me sumergí en el código fuente para la mayoría de estos.
Mi siguiente paso parece ser actualizar mi proyecto a CakePHP 1.3 y probar el último complemento. Pero no sé cuándo tendré tiempo para ello. (es decir, nadie aguante la respiración)
Si crees que he entendido mal cómo funciona alguno de estos complementos y puedo ofrecer resultados sobre cómo hacer que funcionen para mí. Estaría feliz por la respuesta de un comentario.
Utilice el plugin de Migrations 3.x aquí.
Todos los problemas que tienen las otras herramientas antiguas están arreglados por diseño. Y está bajo un fuerte desarrollo y obtiene más funciones y arreglos cada semana.
También puede usar fácilmente la nueva herramienta para las aplicaciones 1.xy 2.x existentes. Acabo de publicar una publicación sobre cómo usar Migraciones 3.x en aplicaciones 2.x, por cierto.