您如何通过 FTP 上传核心 PHP 文件而不会中断您网站的访问者
Posted
技术标签:
【中文标题】您如何通过 FTP 上传核心 PHP 文件而不会中断您网站的访问者【英文标题】:How do you upload a core PHP file via FTP without interrupting a visitor to your site 【发布时间】:2015-08-16 12:23:40 【问题描述】:每当我管理的基于 php 的活动站点需要紧急更改代码时,我都会离线更改代码,在本地服务器上对其进行测试,然后在满意时通过 FTP 将更新后的文件上传到生产服务器。
这显然有效,但我发现当我在繁忙的网站上执行此操作时,如果有人在我上传的同时访问浏览器中的文件,他们将收到 PHP 解析错误。我认为这是因为通过 FTP 的上传在他们尝试访问时尚未完成。
由于网站 24/7 都很忙,我不能等到一段安静的时间再上传我的新文件,那么我该如何避免这种情况呢?某些 FTP 服务器是否比其他服务器更好地处理此问题,还是我打算以错误的方式部署到生产服务器?
CENTOS 6.6、Apache、ProFTPd/PureFTPd、PHP 5.3
【问题讨论】:
那么不要上传到生产目录。上传其他地方,然后在上传完成后将文件移动到位。本地移动将比 ftp-into-place 快得多。 @MarcB:是的。此外,如果初始上传是在同一个文件系统上,则移动操作是原子的,几乎是瞬时的,因为它只需要更新 inode。 我和@MarcB 在一起,我就是这样做的。我将我的提交推送到 github。当我在我的网站上进行更改时,通过 ssh 将我的数据复制到本地。 【参考方案1】:您可以创建应用程序的两个后端(副本,例如 nginx 上游)并单独更新它(禁用当前更新的后端)。
【讨论】:
【参考方案2】:您可以通过将所有应用程序上传到另一个目录来实现。您的公共目录可以链接到您的应用程序当前版本的目录。当您上传所有应用程序文件时,您只需切换symlink。
例如,您在
处配置了一些 apache/nginx 主机/var/awesome-app/public_html
将您的应用程序存储在其他地方,例如你的家庭目录。将您的应用程序上传到单独的 release 目录,如下所示:
~/awesome-app/releases/1
~/awesome-app/releases/2
~/awesome-app/releases/3
...
~/awesome-app/releases/<RELEASE_NUMBER>
创建一个从您的应用程序到主机指向的路径的符号链接。这个命令应该被调用一次 - 当你设置你的环境时:
ln -s ~/awesome-app/current /var/awesome-app/public_html
上传您的应用程序后,创建(替换)符号链接到当前版本。每次发布都应调用此命令。
ln -sf ~/awesome-app/releases/4 ~/awesome-app/current
您可能还想查看Software deployment。
【讨论】:
以上是关于您如何通过 FTP 上传核心 PHP 文件而不会中断您网站的访问者的主要内容,如果未能解决你的问题,请参考以下文章