我正在使用Fabric 1.01,在我的fabfile中,我正在使用put命令。该行是:
put('file.tar.gz', '~/file.tar.gz')
服务器位于env.hosts列表中。 file.tar.gz
与fabfile位于同一目录中,我正在运行此目录中的代码。
当我运行代码时,它就会运行这个put命令。在输出失败之前是:
[uname@site.com] put: file.tar.gz -> ~/file.tar.gz
Fatal error: put() encountered an exception while uploading 'file.tar.gz'
Underlying exception message:
No such file
任何人都知道这是从哪里来的?该文件肯定存在于我的本地机器上,我也尝试了第二个put()参数只是'/ server / path / to /'而且我尝试使用该文件的绝对路径进行第一次put()争论,一切都没有用。
答案 0 :(得分:20)
我发现此错误消息颇具误导性。打印的消息是:
Fatal error: put() encountered an exception while uploading 'local/path'
Underlying exception:
No such file
这导致您认为问题在于Python无法在local/path
看到该文件。我不确定从来没有这种情况,但在原始问题和我的情况下,问题都与此无关,而问题是 远程文件夹无法找到。由于此命令不会自动在其找不到的路径中创建任何文件夹,因此当它无法找到远程路径中的任何远程文件夹时,它将失败。
在我的特定情况下,问题在于我提供了一条路径,我打算在远程Linux系统上将其解释为绝对路径,但是我从最初的/
开始。
答案 1 :(得分:10)
put('file.tar.gz', '~/file.tar.gz')
显然,Fabric使用本地计算机的主目录而非服务器进行了波浪插值。用服务器上的显式路径替换波浪号后,它可以正常工作。