使用Fabri写入远程文件

2024-10-06 12:14:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试备份数据库,并使用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()

Tags: 文件服务器数据库远程openblockdbfilefile
3条回答

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

  1. 您需要再次阅读Fabric教程。
  2. 您应该使用os.path.join来组装文件路径。
  3. open()调用试图打开本地计算机上的文件,而不是远程服务器上的文件。

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

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

(有关mysqldump和gzip的更多信息,请参见:Compressing mysqldump output

相关问题 更多 >