Estoy tratando de implementar una aplicación Django desde un servidor de desarrollo a un servidor de producción. Configuré un virtualenv con python 3.8.10, creé la base de datos mysql, estoy ejecutando en virtualenv. No obtengo errores de python manage.py check
, obtengo "no se detectan cambios" cuando python manage.py makemigrations
, pero cuando ejecuto ```python manage.py migrate`` obtengo lo siguiente:
Operaciones a realizar:
Aplicar todas las migraciones: administrador, autenticación, tipos de contenido, sesiones
Ejecutando migraciones:
Aplicando contenttypes.0001_initial... Aceptar
Aplicando admin.0001_initial... Rastreo (última llamada más reciente):...
línea final del rastreo:
Django.db.utils.OperationalError: (1824, "Error al abrir la tabla de referencia 'classroom_user'")
("aula" es el nombre de la aplicación dentro del proyecto "códice") Recientemente reconstruí todas las tablas en esta base de datos en mi servidor de desarrollo sin problemas.
La base de datos del servidor de producción está vacía. models.py está en su lugar y completo. Lo probé con una carpeta de migraciones vacía y la carpeta de migraciones eliminada. La migración crea django_admin_log, django_content_types, django_migrations, pero ninguna otra tabla.
Todas las otras publicaciones que he visto en esto han sido sobre restricciones de clave externa, pero en mis models.py todas las tablas que tienen claves externas se especifican después de las tablas donde están las claves.
Vale, solucionado.
Pude obtener un error diferente con una versión ligeramente anterior de Django (3.2.6 en lugar de 3.2.8) y en un servidor de Windows en lugar de Linux. Esto me dio un error con respecto a las restricciones de clave externa que he visto en otras publicaciones, pero no era un error que hubiera visto antes.
Primero tuve que realizar las migraciones para mi aplicación (donde el aula es la aplicación dentro del proyecto):
python manage.py makemigrations classroom
python manage.py migrate
¡Esto funcionó para mí! Intente verificar su tabla ENGINE con este comando:
MySQL: SHOW TABLE STATUS WHERE NAME='XXX';
Luego busque su motor (es MyISAM
en InnoDB
). Después de eso, cambie el motor de su tabla recién creada (que arroja el error) y hágalo coincidir con su tabla de classroom_user
con este comando:
MySQL: ALTER TABLE classroom_user ENGINE='XXXX';
Luego ejecuta la migrate
de nuevo y ¡listo!