Fabric put命令出现致命错误:'无此文件'异常
我正在使用 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() 参数改成文件的绝对路径,但都没有用。
3 个回答
0
这个错误的提示确实可以更清楚一些。我原以为是我想上传的文件找不到,但其实是我想上传文件的那个文件夹根本不存在。创建了那个文件夹后,问题就解决了。
20
我觉得这个错误信息有点误导人。打印出来的信息是:
Fatal error: put() encountered an exception while uploading 'local/path'
Underlying exception:
No such file
这让你觉得问题出在Python没有找到local/path
这个文件上。我不确定这种情况是否完全不可能,但在原问题和我遇到的情况中,问题根本和这个无关,真正的问题是找不到远程文件夹。因为这个命令不会自动创建它找不到的路径中的任何文件夹,所以当它找不到远程路径中的任何文件夹时,就会失败。
在我遇到的具体情况中,问题是我提供了一个我希望在远程Linux系统上被解释为绝对路径的路径,但我忘记在开头加上/
。
11
哎呀,我在处理这个问题的时候有点懒,没把问题匿名处理好。我的代码里用了一个波浪号:
put('file.tar.gz', '~/file.tar.gz')
看起来Fabric在处理这个波浪号的时候,是用我本地电脑的家目录,而不是服务器上的目录。后来我把波浪号换成了服务器上的具体路径,结果就正常工作了。