作为库使用¶
从文档中我们可以看出,Fabric 最主要的应用场景是通过 fab 命令来引用 fabfile ,然而 Fabric 的内部实现在保证它在不使用 fab
和 fabfile 的场合也非常易于使用——本文档将会详细向你介绍。
此外还有写需要时刻谨记的事情,比如:编写好 fabfile ,运行 fab
命令时是怎样创建并断开连接的。
连接服务器¶
前面我们已经介绍过 Fabric 是怎样连接主机的,不过仍有些知识埋藏在 运行 文档中,具体来说你可能需要快速浏览一遍 Connections 章节的文档。(虽然不必要,但我强烈建议你把整个文档都快速浏览一遍。)
如那些章节中所提到的, run
和 sudo
这样的操作在连接时都会查看同一处设置: env.host_string 。其它设置主机列表的机制都用于 fab
命令,和作为 Python 库使用没有关系。
也就是说,在 Fabric 1.3 中,如果你想要结合任务 X
和主机列表 Y
,可以使用 execute
,就像这样: execute(X, hosts=Y)
,详细介绍请访问 execute
文档——手动操作主机列表功能真的很有必要。
断开连接¶
fab
所做另一件重要的事是,会在会话结束的时候断开所有连接,否则 Python 程序将永远等待网络资源的释放。
在 Fabric 0.9.4 或更新版本中,你可以使用这个函数方便地实现这个功能: disconnect_all
,只需要保证程序结束的时候调用该方法(通常在 try: finally
表达式中,以防意外的错误导致无法释放连接)即可。
如果你使用的是 Fabric 0.9.3 或更早之前的版本,你可以这样做( disconnect_all
仅仅提供了更好看的输出):
from fabric.state import connections
for key in connections.keys():
connections[key].close()
del connections[key]
最后注意¶
本文档只是个草案,因此并不会详细覆盖作为 Fabric 库导入与使用 fab
命令之间的全部区别,不过上面已经列出了其中最需要注意的陷阱。在不确定如何使用时,可以参考 Fabric 源代码中 fabric/main.py
部分,fab
命令的实现主要在这里,相信会是很有用的参考。