我正在使用lftp通过Travis CI部署一个网站。在部署之前有一个构建过程,因此存在一个构建目录,并将其推送到ftp服务器的根目录。
lftp $FTP_URL -e "glob -d mirror build . --reverse --delete-first --parallel=10 && exit"
它工作得很好,但我不喜欢有一个停机/临时PHP解析错误,因为我的网站上缺少文件。解决这个问题的最好方法是什么?
我的第一种方法是设置一个临时目录,但是lftp手册页显示只有一个用于临时文件的选项。我仍然尝试了这个选项,但它没有帮助。
我的第二种方法是使用“镜像构建临时”来使用一个临时文件夹,然后用它替换根目录。这里的问题是,我不能在删除旧文件和文件夹(如rm -rf * )时排除临时文件夹。
发布于 2018-09-28 07:31:41
最后,
我写了一个很小的Grunt plugin,它可以很好地处理lftp操作,并帮助处理文件和目录。
这是一个零市中心模式-每个占位符都将被自动替换:
command:
[
'mirror {SOURCE} {TARGET}-new-{TIMESTAMP} --reverse --delete-first',
'mv {TARGET} {TARGET}-old-{TIMESTAMP}',
'mv {TARGET}-new-{TIMESTAMP} {TARGET}',
'rm -rf {TARGET}-old-{TIMESTAMP}',
'exit'
]
这将是Vanilla lftp命令-记住手动替换每个占位符:
lftp $FTP_URL -e "mirror {SOURCE} {TARGET}-new-{TIMESTAMP} --reverse --delete-first; mv {TARGET} {TARGET}-old-{TIMESTAMP}; mv {TARGET}-new-{TIMESTAMP} {TARGET}; rm -rf {TARGET}-old-{TIMESTAMP}; exit"
发布于 2016-11-28 17:12:40
对于不涉及添加/删除php文件的小更改,set xfer:use-temp-file
应该就足够了。另外,不要使用--remove-first
,因为它会导致lftp在上传之前删除过时的文件。
对于较大的更改,我会为站点的每个版本创建一个单独的目录,并使用.htaccess、mod_rewrite或其他配置文件将web服务器重定向到该目录。这项技术将允许原子切换到新版本(如果需要,可以切换到新版本)。此外,如果您根据您的IP地址或使用其他规则有条件地重定向到新版本,您将能够对新版本进行最终的投产测试。
如果您不想为每个新版本重新上传整个站点,并且FTP服务器本身支持FXP,那么您可以使用mirror old_directory ftp://user@example.com/new_directory
将旧版本复制到新目录,然后使用mirror -eR local_dir new_directory
更新新目录。
https://stackoverflow.com/questions/40814642
复制相似问题