如何正确部署应用程序从开发到生产以及如何处理多个站点配置。 我的所有开发都是通过位于var/svn/myapp/trunk的svn完成的,实际生产代码位于/ var/www/myapp中。如何正确部署您的PHP应用程序?
我把我的本地机器上的最新代码签出到名为“myapp_latest_svn”的目录中。 我的网站和地点的特定代码在我的主要settings.php配置,其中有H_PATH =“http://myapp.com” &数据库配置为DB_HOST,db_user_name和DB_PASSWORD这是因为你知道在 本地计算机设置(其中localhost/MyApp的不同设置。 com只是一个Apache别名)&上的生产(live site运行在myapp.com上)服务器。
此外,.htaccess文件与生产服务器上的不同。总之,开发和生产之间有许多不同之处。
我把我所有的工作放在SVN中。每天早上我使用SVN Update将最新的代码更新到我的本地svn仓库。 当我准备上线时,我用svn Commit构建了一个发行版。
然后在发行版中,我必须记住将所有适当的开发文件更改为其生产副本。 现在我不得不手动编辑生产settings.php & .htaccess以反映网站特定的更改。
我正在寻找一种自动化的方式从开发到版本完整的版本和 没有手动编辑文件这是容易出错和不好的做法。
一种方法是使文件的生产版本只读(0444)。这样,当我做一个svn导出, 他们不会被开发版本的文件覆盖,我不必担心编辑 每个从开发到生产的文件。但是,这是一种糟糕的做法,例如持续集成。
另外通过制作settings.php的多个副本(一个用于localhost,beta和prod)。然后使用从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对我来说不是问题,只有settings.php和.htaccess。
另外我如何告诉svn不要更新某些目录,因为这也是特定于站点(/ log,/ cache,/ assets,/ downloads)。 另外我还需要保留apache(www_data)写入访问权限以完成上述文件。
最后,我不想在导出时将空的中继目录和.svn文件复制到生产服务器。
从svn构建到生产服务器时,如何使用Phing或甚至shell脚本进行集成而不会导致任何这些问题。
这可能对很多野外应用程序开发人员非常有用。
由于提前,
ocptime
伟大的链接!谢谢! – 2010-01-18 05:20:42