【问题标题】:Write to a Remote file with Fabric使用 Fabric 写入远程文件
【发布时间】:2011-06-04 15:11:10
【问题描述】:

我正在尝试使用Fabric 备份数据库并将它们移动到不同的服务器。

在远程服务器上,打开文件以写入文件失败并出现错误。

newFile = open('%s%s' % (dumpPath,newFileName) ,'w')
IOError: [Errno 2] No such file or directory: '/home/ec2-user/dbbackup.sql.bz2'

该文件存在,我什至尝试预先创建,以防fabric没有创建权限,但它仍然没有工作

 run("touch dbbackup.sql.bz2")

编辑:我知道我可以将文件上传到远程服务器,但这不是我试图用 open 命令做的。我正在尝试压缩一个大文件(数据库转储)是否可以在远程服务器上执行此操作,或者我是否必须将数据库转储复制到本地主机,在那里压缩然后上传回来。这是本地主机上的压缩:

compObj= bz2.BZ2Compressor()
newFile = open('%s%s' % (dumpPath,newFileName) ,'w')
dbFile = file( '%s%s' % (dumpPath,filename), "r" )
block= dbFile.read( BLOCK_SIZE )
while True: #write the compressed data
        cBlock= compObj.compress( block )
        newFile.write(cBlock)
        block= dbFile.read( BLOCK_SIZE )
        if not block:
            break
    cBlock= compObj.flush()

【问题讨论】:

    标签: python fabric


    【解决方案1】:

    在 Fabric 中,您永远不会“在远程服务器上”。一些 Fabric 命令在本地运行,一些在远程服务器上运行。在这种情况下,您使用的是 Python 的 open 函数,该函数尝试在本地计算机上打开文件,但可以理解的是失败了。您可以使用 Fabric 的 put and get functions 在本地计算机和远程服务器之间移动文件。

    【讨论】:

    • 感谢您发布链接。请参阅我更新的问题。我可以使用远程主机上的数据远程打开并添加到文件还是需要来回复制
    【解决方案2】:

    我不知道你是否可以远程打开文件。但即使可以,在您的情况下也可能不是一个好主意,因为您将通过 ssh 获取大文件(请记住,Fabric 仍在您的本地计算机上运行)。为什么不远程压缩文件,然后获取压缩文件呢?在 mysqldump 的情况下,它看起来像这样:

    run('mysqldump [options] | gzip > outputfile.sql.gz')
    get('outputfile.sql.gz')
    

    (更多关于 mysqldump 和 gzip 的信息:Compressing mysqldump output

    【讨论】:

    • 谢谢,正在尝试使用 python 进行压缩,但使用 gzip 也可以。
    【解决方案3】:
    1. 您需要再次阅读 Fabric 教程。
    2. 您应该使用 os.path.join 来组装您的文件路径。
    3. 该 open() 调用试图在您的本地计算机上打开文件,而不是在远程服务器上。

    【讨论】:

      猜你喜欢
      • 2014-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多