如何正确地将应用程序从开发部署到生产,以及如何处理多个站点配置。
我所有的开发都是通过位于var / svn / myapp / trunk的svn完成的
实际的生产代码是/ var / www / myapp。
我查看最新的代码到我的本地机器到一个名为“myapp_latest_svn”的目录。
我的主要settings.php中有网站和位置特定的代码,其中H_PATH =’http://myapp.com‘
& db_host,db_user_name和db_password的db配置设置,如您所知
本地机器设置(其中localhost / myapp.com只是一个Apache别名)&在生产(live site在myapp.com上运行)服务器。
.htaccess文件与生产服务器上的文件不同。总之,开发和生产之间存在一些差异。
我把所有的工作都保存在SVN中。每天早晨,我使用SVN Update,将最新的代码更新到本地的svn存储库。
当我准备好上线的时候,我用svn Commit来构建一个版本。
然后在发行版中,我必须记住将所有相应的dev文件更改为他们的生产对象。
现在我不得不手动编辑制作settings.php& .htaccess来反映网站的具体变化。
我正在寻找一个自动化的方式从开发到生产完成与版本控制和
没有手动编辑错误的错误和不良练习的文件。
一种方法是使文件的生产版本只读(0444)。这样当我做svn出口,
它们不会被dev版本的文件覆盖,我不用担心编辑文件
从开发到生产。但是,这是像持续集成这样的事情的糟糕方式。
还可以通过制作settings.php的多个副本(一个用于localhost,beta和prod)。然后使用shell脚本
从svn导出,然后一旦导出完成,它将使用正确的settings.php替换settings.php,
取决于我们正在部署的位置。这样一切都是自动化的。
但这也是一个跛脚的方式。
最后的方式是
if( eregi ("myapp.com$", $_SERVER['HTTP_HOST']) ){
define('H_PATH', 'myapp.com');
} else {
define('H_PATH', 'localmyapp.com');
}
对于settings.php而言,这是很好的。
但是在.htaccess中,你不能像.htaccess这样检查。
每次我部署我的网站时,我不想要最终做出改变设置。
我的DB模式不在版本控制中,所以db不是我的问题,只有settings.php和.htaccess。
另外,如何告诉svn不更新某些目录,因为这也是站点特定的(/ log,/ cache,/ assets / / downloads)。
此外,我还需要保存apache(www_data)写入访问完整的上述文件。
最后,当我导出时,我不想将空的trunk目录和.svn文件复制到生产服务器。
在从svn到生产服务器的构建时,如何使用Phing甚至一个shell脚本进行集成,而不会导致任何这些问题。
这对于野外的许多wannabe应用程序开发人员来说可能是有用的。
提前致谢,
ocptime