【问题标题】:How to rsync to local folders from a Django view如何从 Django 视图同步到本地文件夹
【发布时间】:2012-02-20 19:52:57
【问题描述】:

我有一个网站,要求登录的管理员能够将暂存数据库推送到实时数据库。它做的第一件事是转储 sql 并推送到目标数据库。这工作正常,但是当我去同步包含上传材料的文件夹时,我得到一个错误。这只发生在从视图中调用脚本时,而不是从命令行或 python shell。这是函数:

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”。我最好的猜测是,由于在脚本完成执行之前有相当长的延迟,因此视图不知道如何正确等待它结束。我的另一个猜测是路径以某种方式从视图中搞砸了。

【问题讨论】:

  • 这可能是由于用户在文件上设置了身份验证吗?你可以试试 -o 选项。您是否在 rsync 上尝试了 -v 选项以查看是否发出任何警告?
  • 我会尝试...关于从视图中调用 rsync 的最佳方式的任何想法?
  • 除非你非常确定origin_foldertarget_folder,否则不要在生产中使用这段代码,否则你很容易被shell注入。

标签: python django rsync subprocess


【解决方案1】:

检查您服务器的权限,它可能与您使用命令行时的用户/权限不同,因此无法执行该命令。

【讨论】:

    【解决方案2】:

    当您通过视图运行命令时,“django”用户正在调用该命令,并且可能没有执行该命令的权限。您可以在运行 rsync os.chown(path, uid, gid) 之前尝试更改目录的所有者,看看是否可以帮助您。

    此外,如果您运行 rsync -avzP,您将获得额外的详细、压缩和部分/进度选项,这些选项可能会提供更多信息来帮助您进行调试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-14
      • 1970-01-01
      • 2012-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-09
      相关资源
      最近更新 更多