![将更新推送至实时服务器...FTP 无法解决问题...有更好的方法吗?](https://linux22.com/image/554285/%E5%B0%86%E6%9B%B4%E6%96%B0%E6%8E%A8%E9%80%81%E8%87%B3%E5%AE%9E%E6%97%B6%E6%9C%8D%E5%8A%A1%E5%99%A8...FTP%20%E6%97%A0%E6%B3%95%E8%A7%A3%E5%86%B3%E9%97%AE%E9%A2%98...%E6%9C%89%E6%9B%B4%E5%A5%BD%E7%9A%84%E6%96%B9%E6%B3%95%E5%90%97%EF%BC%9F.png)
我是 2 人团队的首席开发人员。我的搭档刚刚加入该项目,尽管使用 GIT 进行版本控制等,但在代码部署方面我们仍然停留在黑暗时代。
目前,我使用 Filezilla 通过 FTP 对所有网站进行更新(这样,我可以控制/负责所有上线的内容)。
我已经这样做了很多年,但是现在我们有一些大型的 PHP 类(300KB)和大量的流量。
简而言之,每次我上传一个关键类别(例如“常规”)时,网站都会瘫痪,直到文件上传完成。每次只需要 5/6 秒,但这越来越令人无法接受。
我意识到我可以用不同的名称上传文件,然后重命名两个文件......但真的有更好的方法吗?
我听说过从另一台服务器同步代码,但我不知道这如何防止在上传时切换到新文件。
我们只有一台服务器(用于 DB 和 Apache),但也使用一些云服务器(以 openx 为例)。
答案1
rsync 在默认传输模式下就是这样做的:它在传输期间在目标上创建一个新文件,并在传输完成后重命名它。
尽管如此,如果您的上传“不一致”,即您上传的文件依赖于其他尚未上传的文件,这将无济于事。如果您担心这种情况,您需要上传到完全不同的目录结构,并在整个传输完成后进行切换。
答案2
WinSCP 具有目录“同步”功能,可自动同步到远程 FTP 服务器,例如 Filezilla Server。Filezilla 客户端没有此功能。您可以获取此列表中的 SFTP 服务器。如果您选择了正确的 SFTP 服务器,则上传时将不会保持文件锁,直到传输完最后一比特并替换文件为止。
或者,您可以保留一个非实时服务器 FTP 目录,然后使用另一个本地软件(如 WinSCP)立即同步到同一服务器上的实时目录。这样,您就可以避免在上传延迟期间文件锁定。