5

过去,我总是实时编辑我所有的网站。不太担心我的 2 位访客看到错误消息。

但是,可能有一天我会接待超过 2 个访客。测试我的更改然后使所有更改同时生效的最佳方法是什么?

我是否应该将单个文件复制并粘贴到子文件夹中并进行编辑,然后在完成后将它们复制回来?如果我的代码中有完整的 URL(如果我移动它们会中断)怎么办?也许我可以使用一些 .htaccess 黑客来解决这个问题?数据库虚拟测试数据呢?我应该欺骗我所有的 MySQL 表并引用它们吗?

我正在为我关心的特定项目使用 CakePHP,但我很想知道人们在使用 Cake(可能有工具可以帮助解决这个问题?)和没有框架的情况下采用什么方法。


我收到了很多关于 SVN 的建议,听起来不错,但不幸的是我的主机不支持它:\

4

5 回答 5

18

您可以做的最好的事情是创建一个临时环境来测试您的更改。登台环境(理想情况下)是您的生产系统的完整、可工作的副本。这将防止您遇到许多令人头疼的问题和意外的生产崩溃。

如果您正在处理一个小型项目,最好的办法是在本地(包括数据库)重新创建您的远程站点。在那里对所有更改进行编码,然后,一旦您对完成感到满意,就可以一次将更改部署到您的远程站点。

于 2009-04-06T00:43:38.463 回答
5

我建议将您的网站代码置于完全版本控制(git 或 subversion)之下。在单独的私有沙箱服务器中测试和维护您的源代码,并在准备发布时在生产站点查看最新的稳定版本。

对于数据库支持,即使是小型项目,我也会维护单独的开发和生产数据库。您可以将用于生成和维护架构以及测试或引导数据的 SQL 与站点的其余部分一起进行版本控制。从一个易于分离的配置文件管理您的站点使用的数据库环境,并告诉您的版本控制解决方案忽略它。

绝对 URL 将是一个问题。如果您无法避免它们,您总是可以将主机名存储在同一个配置文件中并根据需要读取它......当然,样式表和 Javascript 资源中除外。对于该问题,我的第二个选择是 URL 重写魔术或开发服务器中的等效程序,而/etc/hosts当我想测试依赖于它们的功能时,我的最后一个选择就是弄乱文件。

于 2009-04-06T01:22:04.550 回答
3

我在笔记本电脑上设置了一个开发服务器,尽可能地复制我的网络服务器(服务器软件和配置、操作系统、文件系统布局、安装的软件等)。这样我就可以在笔记本电脑上编写代码并在本地进行测试; 一旦我在那里工作,我将它复制到服务器。有时,由于两台计算机之间的细微差异会出现一些问题,但这些问题总是很快得到解决(以防万一,我的站点位于 SVN 存储库中,因此我可以随时恢复它)。

在我曾经维护的另一个网站上,我使用了一种稍微不同的策略:我在站点内指定了一个 URL 路径,该路径将是基础站点的开发版本。也就是说,http://www.example.com/devweb通常会 mirror http://www.example.comhttp://www.example.com/devweb/foo/bar.php会 mirrorhttp://www.example.com/foo/bar.php等等。我在devweb文档根目录下创建了一个文件夹,但是我没有复制所有文件,而是配置了服务器,以便如果目录中不存在请求的文件/devweb,它会看起来在文档根目录下。不过,这是一个比拥有单独的开发服务器更脆弱的设置。

于 2009-04-06T00:55:08.547 回答
2

我有许多用 CakePHP 编写的网站。我使用生产服务器上的数据库在本地机器上进行开发和测试(我只有一个适用于我的静态 IP 地址的 MySQL 登录名)。

所有代码都签入 Subversion,然后我有一个持续集成服务器 - Hudson:

https://hudson.dev.java.net/

这会在生产机器上构建和部署我的项目。它只是检查特定项目的 subversion 中的代码,然后运行一个简单的脚本来 SSH/将文件复制到服务器上的暂存或生产位置。您可以将其设置为手动过程(我目前有),或者您可以设置它以便在签入代码后部署它。还有很多其他 CI 工具可以设置来执行此操作(有一个看看Xinc也是如此)。

http://code.google.com/p/xinc/

至于绝对 URL,您始终可以在主机文件中设置一些内容,以在您的机器上本地解析站点。它对我有用,只是不要忘记之后把它拿出来:)

希望有帮助...

于 2009-04-06T03:14:38.383 回答
2

我有一个 config/database.php 版本,它使用 php 服务器变量“服务器名称”来确定应用程序在哪个系统上运行。然后,当我在我的家庭系统、开发站点(与实时机器共享相同的规格)和实时机器上克隆我的 git 存储库时,它们都连接到各自的数据库。

我贴在这里,但我也相信它可以在面包店买到。

http://pastebin.com/f1a701145

于 2009-04-15T23:57:11.540 回答