如何从Django视图使用rsync到本地文件夹
我有一个网站,需要让登录的管理员能够把一个测试数据库推送到一个正式数据库。这个过程的第一步是把数据库的内容导出成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
当你通过视图运行命令时,是'django'用户在调用这个命令,而这个用户可能没有权限去执行它。你可以尝试在运行rsync之前,先改变一下目录的拥有者,使用os.chown(path, uid, gid)
这个命令,看看这样能不能解决问题。
另外,如果你运行rsync -avzP
,你会得到更多的详细信息、压缩和部分/进度选项,这可能会提供更多的信息,帮助你排查问题。
1
检查一下你服务器的权限设置,可能在你使用命令行的时候,权限和用户不一样,所以可能无法执行那个命令。