我正在使用LFTP通过Travis CI部署网站。部署之前有一个构建过程,因此存在构建目录并将其推向FTP服务器的根。
lftp $FTP_URL -e "glob -d mirror build . --reverse --delete-first --parallel=10 && exit"
它运行良好,但是由于网站上缺少文件,我不喜欢停机/临时PHP解析错误。该问题的最佳工作方式是什么?
我的第一种方法是设置临时目录的选项,但是LFTP Man页面说,临时文件只有一个选项。我仍然尝试了该选项,但没有帮助。
我的第二种方法是使用"镜像构建温度"使用临时文件夹,然后用它替换根。这里的问题是,我在删除诸如rm -rf *之类的旧文件和文件夹时无法排除临时文件夹。
对于不涉及添加/删除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
。<<<<<<<<<<
这是一个零市区模式 - 每个占位符应更换:
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"