【问题标题】:Fabfile path problem on windowswindows上的Fabfile路径问题
【发布时间】:2011-05-02 07:41:17
【问题描述】:

我正在尝试使用 Fabric 和 Mercurial 部署我的网站。在 Windows 命令行中,运行 hg push 可以完美运行,没有任何问题。

但是当我尝试写作时

local("hg push")

在一个 fabfile 中并运行它,我得到了错误:

'"hg push"' is not recognized as an internal or external command, operable program or batch file. 

谷歌搜索让我知道这可能是 Python 子进程中的 PATH 变量有问题,例如这里:Why would an "command not recognized" error occur only when a window is populated?

你能帮帮我吗?是 Fabric 中的错误还是我自己的代码中的错误?

谢谢。

【问题讨论】:

  • Fabric 目前在 Windows 上没有得到很好的支持,所以看到这种情况我并不感到惊讶。如果您请提供一些额外的细节,可能会做得更好;使用“with show('everything', 'debug'):”添加调试日志,并包含 PATH 的内容。此外,包括您当时拥有的所有“环境”设置。
  • Chris R:我仍然不确定问题出在哪里。将所有内容放入show('everything','debug') 并没有透露有关该问题的更多信息。我尝试直接设置env.path,得到了如下所述的奇怪结果。将 local() 更改为 os.system() 解决了这个问题,尤其是对于像 hg push 这样的简单命令。

标签: windows mercurial path fabric


【解决方案1】:

正如 Chris R 所提到的,我们不会提供大量 Windows 支持,因为核心开发人员都不是 Windows 用户;我们必须依赖更精明的 Windows 用户的报告和建议。

听起来这可能与this recently fixed, but not released, bug 有关——它将在即将推出的 Fabric 1.0.2 中。如果您有勇气,现在可以通过以下方式进行测试:

pip install -e git+git://github.com/bitprophet/fabric@1.0#egg=Fabric

如果你随后执行fab -V,它应该说它是 1.0.2a——如果是这样,运行你的 fabfile 可能会更好。如果您这样做,请告诉我们!

【讨论】:

  • 将 local() 更改为 os.system() 解决了这个问题,尤其是对于像 hg push 这样的简单命令。如果您希望我提交错误报告,请告诉我。
  • 如上所述更新到 1.0.2a 对我有用。在 Windows 上使用 Fabric 1.0.1 "local('echo %PATH%')" 失败,并显示有关文件名不正确的错误消息。在 Fabric 1.0.2a 中,相同的命令按预期工作。
  • 我在 2.4.0 上,但我仍然收到此错误。此外,我在使用 Fabric 时无法正常使用 SSH 密钥但在终端上运行良好时遇到了问题。该错误与底层 SSH 客户端无法识别密钥有关。
【解决方案2】:

听起来您需要将 Mercurial 添加到 Fabric 流程的 PATH

可能是这样的:

fabric.context_managers.path(<path to your hg.exe>)
run('hg push')

请参阅path context manager 的文档。不清楚path 是否适用于local 命令,但run 命令被明确引用。

【讨论】:

  • 嘿,我试过了,但它没有附加到env.path。所以我尝试直接设置 env.path 。输出为local: PATH=$PATH:"C:\Program Files\Mercurial\hg.exe" hg push 文件名、目录名或卷标语法不正确。
【解决方案3】:

提供的修复都不起作用,但正在改变

local("hg push")

os.system("hg push")

解决了问题。

【讨论】:

  • 作为 Fabric 的新手,很高兴知道为什么这在没有 cmets 的情况下被否决了?在这里使用 os.system 有什么问题?
  • @jowansebastian 因为使用system 是一种不好的做法。此外,它不在 Fabric 的控制范围内。无论如何,这对 Windows 开发人员来说很糟糕,因为它仍然无法在 2.4.0 上运行
猜你喜欢
  • 1970-01-01
  • 2020-06-29
  • 1970-01-01
  • 2014-09-27
  • 2021-04-02
  • 2021-05-27
  • 2018-03-20
  • 2011-06-05
  • 1970-01-01
相关资源
最近更新 更多