2012-01-27 16 views
5

Ho un sito che richiede la possibilità per un amministratore connesso di inviare un database di staging a un database attivo. La prima cosa che fa è scaricare lo sql e premere sul database di destinazione. Funziona bene, ma quando vado a rsync delle cartelle che contengono il materiale caricato, ottengo un errore. Questo si verifica SOLO quando lo script viene chiamato dalla vista, non dalla riga di comando o dalla shell di Python. Ecco la funzione:Come rsync alle cartelle locali da 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 

Il codice di ritorno è "12" quando si verificano errori. La mia ipotesi migliore è che, poiché c'è un considerevole ritardo prima che lo script finisca di essere eseguito, la vista non sa come aspettare che finisca. L'altra ipotesi che ho avuto è stata che i percorsi in qualche modo si sono rovinati all'interno della vista.

+0

potrebbe essere dovuto all'autorizzazione dell'utente impostata sui file? potresti provare l'opzione -o. Hai provato l'opzione -v su rsync per vedere se vengono emessi degli avvisi? – Priyeshj

+0

Ci proverò ... Qualche idea sul modo migliore per chiamare rsync da una vista? – Sebastian

+0

Non usare questo codice in produzione a meno che non siate sicuri che sia 'origin_folder' e' target_folder', altrimenti siete inclini all'iniezione della shell. –

risposta

1

Verificare le autorizzazioni del server, potrebbe essere diverso utente/autorizzazioni da quando si utilizza la riga di comando e quindi non essere in grado di eseguire tale comando.

2

Quando si esegue il comando attraverso la vista, l'utente 'django' sta chiamando il comando e potrebbe non disporre dell'autorizzazione per eseguirlo. Potresti provare a cambiare il proprietario della directory prima di eseguire rsync os.chown(path, uid, gid) e vedere se questo ti porta ovunque.

Inoltre, se si esegue rsync -avzP si otterranno le opzioni aggiuntive verbose, compress e parziali/di avanzamento che potrebbero fornire ulteriori informazioni per facilitare il debug.

+0

Siete entrambi soddisfatti. – Sebastian

Problemi correlati