2012-01-27 20 views
5

Tengo un sitio que requiere la capacidad de un administrador conectado para enviar una base de datos provisional a una base de datos en vivo. Lo primero que hace es volcar el sql y enviar a la base de datos de destino. Esto funciona bien, pero cuando voy a sincronizar las carpetas que contienen el material cargado, aparece un error. Esto SÓLO ocurre cuando se llama al script desde la vista, no desde la línea de comando o el shell de python. Esta es la función:Cómo sincronizar rsync a carpetas locales desde una vista Django

def copy_media(self, origin_folder, target_folder): 
    command_string = "rsync -a %s %s" % (origin_folder, target_folder) 
    return_code = subprocess.call(command_string, shell=True) 
    return return_code 

El código de retorno es "12" cuando los errores. Mi mejor opción es que, dado que hay un retraso considerable antes de que el script termine de ejecutarse, la vista no sabe cómo esperar correctamente hasta que finalice. La otra conjetura que tuve fue que los caminos de alguna manera se arruinan desde dentro de la vista.

+0

¿podría ser potencialmente debido a la autenticación de usuario establecida en los archivos? podrías probar la opción -o. ¿Intentó la opción -v en rsync para ver si se emiten advertencias? – Priyeshj

+0

Lo intentaré ... ¿Alguna idea sobre la mejor manera de llamar a rsync desde una vista? – Sebastian

+0

No use este código en producción a menos que esté muy seguro de que 'origin_folder' y' target_folder', de lo contrario, es propenso a una inyección de shell. –

Respuesta

1

Comprueba los permisos de tu servidor, pueden ser diferentes usuarios/permisos desde cuando usas la línea de comando y, por lo tanto, no puedes realizar ese comando.

2

Cuando ejecuta el comando a través de la vista, el usuario 'django' llama al comando y puede no tener permiso para realizarlo. Podría intentar cambiar el propietario del directorio antes de ejecutar rsync os.chown(path, uid, gid) y ver si eso lo lleva a cualquier parte.

Además, si ejecuta rsync -avzP obtendrá las opciones adicionales verbose, compress y partial/progress que podrían proporcionar más información para ayudarlo a depurar.

+0

Tienes ambos tipos de cosas. – Sebastian

Cuestiones relacionadas