将代码更新应用于正在运行的网站的最佳方法?

时间:2010-06-27 22:59:02

标签: php

如果我有错误修复或更新,如何将代码更改应用于正在运行的网站? 我能想到的最简单的方法是在不同的目录中设置相同的站点来测试更改,然后让我的网站离线一段时间来更新文件。

有更好的方法吗?

7 个答案:

答案 0 :(得分:15)

创建实时网站的副本当然是一个很好的步骤,在将副本应用到实际网站之前应用更改。

常见的生产环境还包括一系列步骤。

  1. 运行本地开发副本
    在您的开发计算机上运行您的网站副本。这要求开发机器运行Web服务器,数据库服务器以及必要时的邮件服务器。

    对于PHP / Apache / MySQL环境,请查看http://www.apachefriends.org/en/xampp.html。<登记/>
    您可以安全地开发,破坏,测试和更改您当地的开发环境

  2. 来源控制
    使用Subversion,Mercurial或Git将代码保持在源代码管理之下。确保您的本地开发环境受源代码管理。确保您的实时环境受源代码管理。在本地开发,测试更改并将更改提交回来。

  3. 分段和实时环境
    维护一个以上的“实时”副本 - 实际的实时公共站点,并尽可能接近复制品。确保两者都受版本控制。

    一旦测试了本地测试的更改,请更新您的暂存环境(在您的源控制系统中使用)并再次测试。一旦您的暂存站点稳定,您就可以使用源代码管理系统来更新您的实际站点。

    通常不需要将真实的实时站点脱机以应用更新,但是确保你可以在必要时安全地这样做。

答案 1 :(得分:4)

Jon Cram的回答非常好,但我认为在维护开发环境时还有一些非常重要的事情:

  • Evnironments:确保您拥有的2个环境尽可能彼此接近。如果您正在生产PHP 5.1,MySQL 5.0以及Apache 2.2和RHEL,请确保您在沙盒中使用完全相同的所有版本。
  • 数据:制作数据库的副本,然后使用它。请勿针对正在生产的数据编写或测试代码。一个DELETE没有WHERE并且您遇到了麻烦。 (你有备份,对吗?)
  • 配置:在自己的文件中保留所有变量以连接数据库,支持电子邮件地址等。这样,您可以在不改变代码的情况下在不同环境中交换连接参数。另外,我发现将它与代码分开是有帮助的。
  • 构建脚本:有一个命令行脚本可以处理对您的站点应用所有更改。它可以像svn update一样简单或足够复杂,需要它自己的应用程序和库。请参阅http://phing.info/trac/以获取一个好例子。

另外(无耻的插件),这是我刚才写的关于沙箱重要性的帖子:http://chr.ishenry.com/2010/02/22/sandboxes/

答案 2 :(得分:1)

您可以在不同的子域(或子文件夹)上运行新版本,只需在测试后更改域处理。

答案 3 :(得分:1)

不,没有更好的方法(呃!)

嗯,好吧,可能会有一些更好的做法,因为你应该有一个单独的机器用于测试目的。但除此之外,不要指望启发。您只需在负载较低时(也就是在夜间)使网站脱机并更改/替换内容。

答案 4 :(得分:1)

方法1

在用于开发webstie的计算机上创建Live Site的副本。跟着这些步骤: 设置本地测试服务器
使用XampWampServer,您可以在开发计算机上轻松设置本地服务器。只需将所有服务器程序包安装在一起,然后将您的网站文件复制到htdocs文件夹即可然后,您只需访问浏览器中的http://localhost/即可打开您的网站。我个人建议使用Xamp
来源控制
使用Subversion,Mercurial或Git来跟踪您对网站所做的更新。这些软件会跟踪您对每个文件所做的更改。它们将使您能够撤消在开发过程中可能出现的网站错误 保留网站的暂存实时副本
将您网站的暂存实时副本保存在服务器上的任何其他位置,这与公开可用的实时网站完全相同。更新并测试站点的本地副本后。使用源代码管理软件更新登台实时网站。当临时站点变得稳定并且正常工作时。再次使用源代码管理软件更新公共可用的实时站点。这样,您的网站将在您更新时始终保持在线状态。

方法2

它是一个相当昂贵的解决方案(我个人不推荐它,因为第一种方法也会确保相同的结果)。如果没有可用的停机时间,请在其他辅助服务器上运行另一个站点副本,以便在您想要更新主站点时将用户转移到该站点。更新后,您可以将用户转移回实际站点。您还可以使用状态服务器坐在另一台服务器上,以确保在用户从一个站点转换到另一个站点时记录和维护每个会话。

方法3(对于不了解上述两种方法的人简单方法)

安装Xamp将您的站点文件复制到xamp \ htdocs文件夹。此复制的站点将是您的本地副本。通过在浏览器中输入并访问http://localhost/,更新网站并在本地进行检查。检查网站后。使用filezilla ftp客户端更新所有文件(上传时选择更新新文件。)。

答案 5 :(得分:1)

在非常繁忙的网站上 AND 严重SLA的停机时间 AND 使用apache webserver AND 进行涉及大量文件的更新(例如: &gt; 10),超过“Jon Cram”和“Chris Henry”的建议你可以使用这个简单的技巧:

在您的实时环境中使用2个文档根目录,第1个包含旧文件,第2个包含新文件(您已在测试中进行测试),以及符号链接以分享您无法复制的内容,然后:

 1. in the apache config file switch the document root from old to new
 2. check the config file (apachectl -S)
 3. graceful restart the apache (apachectl graceful)

apache将完成在旧环境中为旧请求提供服务,并在新环境中启动新请求。

  • 当然你已经完成了DB
  • 的补丁
  • 当然,您必须编写避免与DB冲突的代码(例如:使用新表和 新的小册子)
  • 当然更简单:停止网站,修补并重新启动

可能你不使用apache,但很多web服务器都有这个功能。

答案 6 :(得分:0)

您应该在计算机上使用您网站的副本。然后进行更新/代码更改等。使用Filezilla FTP client更新网站。 Filezilla将只替换您更新的文件,在此过程中您的网站将在线。