Как выполнить rsync для локальных папок из представления Django - PullRequest
5 голосов
/ 28 января 2012

У меня есть сайт, для которого требуется, чтобы вошедший в систему администратор выдвигал промежуточную базу данных в действующую базу данных. Первое, что он делает, - это дамп sql и отправка в целевую базу данных. Это прекрасно работает, но когда я иду в rsync папки, содержащие загруженный материал, я получаю сообщение об ошибке. Это ТОЛЬКО происходит, когда скрипт вызывается из представления, а не из командной строки или оболочки Python. Вот функция:

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

Код возврата «12» в случае ошибки. Мое лучшее предположение заключается в том, что, поскольку выполнение скрипта завершается довольно долго, представление не знает, как правильно дождаться его завершения. Другое предположение, которое у меня было, заключалось в том, что пути каким-то образом запутались в представлении.

Ответы [ 2 ]

2 голосов
/ 31 января 2012

Когда вы запускаете команду через представление, пользователь 'django' вызывает команду и может не иметь разрешения на ее выполнение. Вы можете попробовать сменить владельца каталога до запуска rsync os.chown(path, uid, gid) и посмотреть, получится ли это где-нибудь.

Кроме того, если вы запустите rsync -avzP, вы получите дополнительные подробные параметры, параметры сжатия и частичного выполнения, которые могут предоставить дополнительную информацию для облегчения отладки.

1 голос
/ 31 января 2012

Проверьте разрешения вашего сервера, он может отличаться от пользователя / разрешения, когда вы используете командную строку, и, следовательно, не сможете выполнить эту команду.

...