【问题标题】:Unable to tar+gzip git directory with local operation无法使用本地操作 tar+gzip git 目录
【发布时间】:2014-03-26 15:45:25
【问题描述】:

我正在尝试为基于 Django 的项目创建自动部署脚本。基本上一切正常,直到我尝试压缩我的项目目录的步骤。 Fabric 似乎执行了命令,它没有返回任何错误。

这是导致问题的行:

local('git archive -v --format=tar HEAD | gzip > test.tar.gz')

我正在使用带有 Cygwin 的 Windows 来访问 Unix 命令。我尝试在项目的根目录(来自 Cygwin)中执行相同的命令,并且成功创建了 test.tar.gz(120 MB)。我还从项目的根目录(使用 Cygwin)执行 Fabric 脚本,执行后我看到 test.tar.gz 被创建,但它只是空的(20 字节)。

编辑:尝试在我的同事 Linux 机器上运行相同的脚本,它运行良好:S

编辑 2:我尝试在 fabfile 中执行而不是本地 subprocess.Popen 命令,该命令正确执行了我需要的操作。现在有一个问题,为什么在本地方法中使用相同的命令(在 operations.py 源中找到)不执行任务?

感谢任何帮助。

【问题讨论】:

  • Python、Django、Fabric 等是安装在 Cygwin 中还是只安装在同一台机器上?
  • 是的,它在同一台机器上。看起来fabric本地命令不会“等待”完成git存档,因为当我直接运行命令时通常需要几秒钟才能完成。但是当commant与fabric一起运行时,它会立即返回:-S跨度>

标签: python deployment fabric


【解决方案1】:

这里的问题是Cygwin's environment variableslocal() 正在调用的系统shell 不可用,

local 只是一个使用内置函数的便捷包装器 激活了 shell=True 的 Python 子进程模块。如果你需要做 有什么特别的,可以考虑直接使用 subprocess 模块。

这就是为什么他们还提供了run()。这使您能够在远程主机上运行 shell 命令。您可以(理论上)创建一个调用 Cygwin 的 bash 文件,然后调用您的 git archive 命令。但是我推荐这个,here 就是原因。

如果您只需要调用 git 命令的能力,我强烈建议您使用msysGit。安装后,将PATH 环境变量设置为指向 msysgit 的 bin 所在位置,以便您可以从 CMD 调用 git 命令。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-21
    • 2016-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多