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.
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
Ci proverò ... Qualche idea sul modo migliore per chiamare rsync da una vista? – Sebastian
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. –