2010-05-04 61 views
3

比方说,你有一个大的网络应用程序与大量访问,但你不希望你的应用程序崩溃&你不希望人们看到在使用FTP替换文件时发生的PHP或MySQL错误,如何避免?如何在执行替换之前执行旧版本的文件?如何避免在更换文件时崩溃网页应用程序?

感谢

回答

2

你可以按照这个2条的规定的至少一个:

  1. 使用与关闭的mtime检查加速器(如APC)。因此直到您手动清除缓存 - 旧版本将从内存中使用
  2. 将虚拟主机符号链接到目录与您的项目:让我们来看看您将项目存储在/ home/project/www。和/ home/project/public_html是你真正的webroot,并且链接到www。所以 - 创建/ home/project/www2,在那里签出文件,设置并做任何你想要的。之后 - 只需更改符号链接。
0

将您的应用程序部署到临时目录中。然后,完成后,只需将原始应用程序目录重命名为app.old,并将您的文件部署到应用程序的目录中即可。0122注意在Unix环境中,这应该可以正常工作。此外,只有上述所有目录位于同一个文件系统上,这才会起作用。在极少数情况下,如果用户在将原始应用程序重命名为.old之后以及在将temp dir重命名为原始应用程序目录之前碰巧访问应用程序,则用户可能会看到404错误。

1

我使用git将我的更改上传到同一台服务器上的临时网站,测试后我将其推送到生产网站。在全部收到文件之前,没有任何文件被更改。另一方面,它只发送压缩的更改,所以我甚至不需要发送整个文件。

暂存区不是必需的。我与很多服务器一起工作,有时候服务器上的一些特定配置(大多数情况下只是发现没有安装扩展)/

我相信你可以在另一个版本控制系统上做同样的事情。你需要小心,虽然。我链接的教程专门将git信息存储在文档根目录之外。否则,有人可以为您的网站克隆所有源代码。

如果你喜欢SVN,每个目录中的.svn会有点烦人。确保人们无法下载他们无法做到的事情。

+0

我不相信推动操作是原子的。尽管push的操作本身就是原子的,但这并不意味着从某个临时目录复制到目标是原子的。所以来源不一致的麻烦还在这里。 – zerkms 2010-05-04 01:30:00

+1

@zerkms推送不会自动更新存储库。它只是发送信息。只有在推送完成后,钩子才会使用新信息执行结账。您可以在推送过程中取消并且更改不会显示。通常当git在结帐时遇到问题(如权限)。它退出并使源保持一致状态。 – Reece45 2010-05-04 01:41:34

相关问题