Cómo hacer en Django una migración manual en producción
Últimamente tengo aún menos tiempo, ya que estoy aprovechando PlagaOS para actualizar los módulos de MenudoProblema y crear algunos módulos que incorporaré más adelante. Pero aquí os dejo un pequeño problema:tras explorar la limitaciones de Django FlatPages decidí hacerme mi propio módulo de páginas estáticas. Lo desarrollé, lo incluí en la página del proyecto, hice el despliegue y como no, acabé haciendo un cambio en el modelo.
Supongamos el siguiente modelo:
class StaticPage(models.Model):
title = models.CharField(_(u'Title'), max_length=90)
content = models.TextField(_(u'Content'))
...
Y queremos añadir un campo más:
class StaticPage(models.Model):
title = models.CharField(_(u'Title'), max_length=90)
content = models.TextField(_(u'Content'))
...
on_menu = models.BooleanField(_(u'Is this entry included on menu?'), default=True)
¿Cómo hacer la migración? Lo primero veamos el SQL para el nuevo modelo:
$ python manage.py sql paginas
BEGIN;CREATE TABLE `paginas_staticpage` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`title` varchar(90) NOT NULL,
`content` longtext NOT NULL,
...
`on_menu` bool NOT NULL
)
;
...
Lo siguiente es modificar nuestra tabla en la base de datos:
$ python manage.py dbshell
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is xxx
Server version: 5.1.41 (Ubuntu)
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> ALTER TABLE `paginas_staticpage` ADD (`on_menu` bool NOT NULL);
Query OK, 2 rows affected (0.06 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> quit
Bye
Y por último, modificamos nuestro modelo (models.py), añadiendo el nuevo campo. Ahora ya depende del servidor Web que tengamos, en mi caso Apache2. Le vamos a indicar que hay cambios:
$ sudo service apache2 reload
Y si todo ha ido bien, debe de seguir todo como estaba y nadie ha notado nada :)
Tags
La teoría es cuando crees saber algo, pero no funciona.
La práctica es cuando algo funciona, pero no sabes por qué.
Los programadores combinan la teoría y la práctica:
Nada funciona y no saben por qué.
