2012-04-27 16 views
7

Estoy tratando de volcar datos de mi servidor de producción para usarlos como prueba en mi servidor de desarrollo, pero obtengo errores al ejecutar "./manage.py test" en el servidor de desarrollo que especifica el archivo de dispositivo creado en el servidor de prod.dispositivos django (de dumpdata) que fallaron al probar

Éstos son los intentos que realiza con base en Búsqueda de Google/stackoverflow:

# python manage.py dumpdata --indent=4 --natural 
error when running tests: IntegrityError: (1062, "Duplicate entry 'cms-agencies' for key 'app_label'") 

# python manage.py dumpdata --exclude contenttypes --indent=4 
error when running tests: IntegrityError: (1452, 'Cannot add or update a child row: a foreign key constraint fails (`test_current`.`django_admin_log`, CONSTRAINT `content_type_id_refs_id_288599e6` FOREIGN KEY (`content_type_id`) REFERENCES `django_content_type` (`id`))') 

# python manage.py dumpdata --exclude contenttypes --natural --indent=4 
error when running tests: IntegrityError: (1062, "Duplicate entry '14-add_agencies' for key 'content_type_id'") 

# python manage.py dumpdata --exclude contenttypes --exclude auth --indent=4 
error when running tests: IntegrityError: (1452, 'Cannot add or update a child row: a foreign key constraint fails (`test_current`.`django_admin_log`, CONSTRAINT `user_id_refs_id_c8665aa` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`))') 

# python manage.py dumpdata --exclude contenttypes --exclude auth --natural --indent=4 
error when running tests: IntegrityError: (1452, 'Cannot add or update a child row: a foreign key constraint fails (`test_current_abril`.`django_admin_log`, CONSTRAINT `user_id_refs_id_c8665aa` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`))') 

También probé la eliminación de " 'init_command': 'SET = storage_engine INNODB'" de settings.py y todavía tiene errores 1062.

No entiendo este problema. ¿No debería django recrear el DB exactamente como estaba en el servidor de prod cuando cargué los aparatos?

+0

de acuerdo, le encantaría la opción de simplemente hacer una copia exacta de la db –

Respuesta

1

Creo que los errores le dicen exactamente lo que está sucediendo. ¿Es app_label único? Yo diría que es. Creo que tienes dos objetos con el mismo valor de clave app_label. (cms-agencies)

Además, cuando tiene una relación de clave externa necesita tener el objeto que corresponde a la clave externa. Los datos de volcado no lo hacen porque solo vuelcan un modelo.

Algo así como https://github.com/davedash/django-fixture-magic es ideal para esto. Vacia su modelo Y todas las dependencias fk.

+2

En el aparato, sí. Lo que supongo que está sucediendo es que django agrega algunos datos al DB (de sus propios modelos), y luego entra en conflicto con el accesorio – Lem0n

10

tuve problemas similares y estos argumentos trabajado para mí:

python manage.py dumpdata --natural --exclude auth.permission --exclude contenttypes --indent 4 

También tuve un montón de problemas con la señal post_save la creación de objetos en dos ocasiones. Hay una solución para eso: How do I prevent fixtures from conflicting with django post_save signal code?

+1

¡Gracias! '--natural' ha sido decretado en Django 1.9, el reemplazo es' --natural-foreign'. Ver [la documentación] (https://docs.djangoproject.com/en/1.11/ref/django-admin/#dumpdata) para más detalles. – mhkuu

0

su problema puede ser que haya descargado un archivo Unicode pero django espera un formato de archivo ASCII al cargar. Esto sucederá usando PowerShell en Windows si eso se aplica a usted.

1

El problema es que si utiliza claves naturales (claves naturales-foráneas en las versiones posteriores de Django), Django almacenará realmente las relaciones muchos a muchos dentro de los objetos principales. Eso es algo que quieres. Pero luego no puede simplemente volcar todas las tablas, no debe incluir las tablas/modelos muchos-a-muchos en su volcado ya que luego cargaría los mismos datos dos veces, y auge, duplicados e IntegrityErrors.

Por ejemplo, usted debe volcar auth.user y auth.Group, pero no auth.User_Groups. Mira ejemplo de un vertedero de Django 1.7:

{ 
    "model": "auth.group", 
    "fields": { 
     "permissions": [], 
     "name": "ST" 
    }, 
}, 
{ 
    "model": "auth.group", 
    "fields": { 
     "permissions": [], 
     "name": "property_manager" 
    }, 
}, 

{ 
    "model": "auth.user", 
    "fields": { 
     "username": "boss", 
     "groups": [ 
      ["property_manager"],["ST"], 
     ], 
     "user_permissions": [], 
    }, 
}, 

siguiente línea crea un volcado completo de usuarios/permisos y tipos de contenido se puede mover a dev para obtener copia idéntica, incluyendo orden de las filas idénticos y claves primarias (probado en Django 1.7):

python manage.py dumpdata auth.User auth.Group contenttypes auth.Permission --indent 4 --natural-foreign > users.json 
Cuestiones relacionadas