如何正确地将应用程序从开发部署到生产以及如何处理多个站点配置.我的所有开发都通过位于var/svn/myapp/trunk的svn完成,实际的生产代码在/ var/www/myapp中.
我将本地计算机的最新代码检出到名为"myapp_latest_svn"的目录中.我在我的主settings.php中有特定于站点和位置的代码,其中包含db_host,db_user_name和db_password的H_PATH =' http: //myapp.com '和db配置设置,这与您在本地计算机设置中所知的不同(其中localhost) /myapp.com只是一个Apache别名)&生产(在myapp.com上运行的实时站点)服务器.
.htaccess文件也与生产服务器上的文件不同.简而言之,开发和生产之间存在许多差异.
我把我所有的工作都放在了SVN中.每天早上我使用SVN Update将最新代码更新到我的本地svn存储库.当我准备好上线时,我使用svn Commit构建一个版本.
然后在发布中我必须记住将所有适当的开发文件更改为其生产对应文件.现在我必须手动编辑生产settings.php和.htaccess以反映特定于站点的更改.
我正在寻找一种自动化的方式,从开发到生产完成版本控制,没有手动编辑文件,这是容易出错和不好的做法.
一种方法是使文件的生产版本只读(0444).这样,当我执行svn导出时,它们不会被文件的开发版本覆盖,我不必担心在从开发到生产的每个移动中编辑文件.但这是做持续整合等事情的坏方法.
还可以制作settings.php的多个副本(一个用于localhost,beta和prod).然后使用从svn导出的shell脚本,然后在导出完成后,它将settings.php替换为正确的settings.php,具体取决于我们部署到的位置.这样一切都是自动化的.但这也是一种蹩脚的方式.
最后一种方式是
if( eregi ("myapp.com$", $_SERVER['HTTP_HOST']) ){
define('H_PATH', 'myapp.com');
} else {
define('H_PATH', 'localmyapp.com');
}
Run Code Online (Sandbox Code Playgroud)
就settings.php而言,这很好.但是什么是.htaccess,你不能像上面的.htaccess一样检查.
我不希望每次部署我的网站时都要做,我必须更改设置.
我的数据库架构不在版本控制中,所以db不是我的问题,只有settings.php和.htaccess.
另外我怎么能告诉svn不要更新某些目录,因为它也是特定于站点的(/ log,/ cache,/ assets,/ downloads).此外,我还需要为上述文件保留完整的apache(www_data)写访问权限.
最后,我不想在导出时将空主目录和.svn文件复制到生产服务器.
在从svn构建到生产服务器时,如何使用Phing甚至shell脚本进行集成而不会导致任何这些问题.
这可能对许多想要在那里疯狂的应用程序开发人员有用.
提前致谢,
ocptime
我目前正在为慈善组织开发一个php应用程序,现在我正处于定义部署实践的阶段.
我们的应用程序使用Zend Framework和Doctrine.该应用程序将推广到不同的服务器,每个服务器都有不同的配置文件.这些机器都是Windows和Linux(但都使用Apache和PHP 5.2+).
源可以在subversion存储库中找到,我们希望在Linux服务器上构建和存储我们的包.
我们希望更新过程与在应用程序目录中运行更新命令一样简单,其中update命令还更新数据库(使用doctrine脚本)并确保框架的依赖性.此更新命令必须是计算机上的命令(我们不能ssh到它们).优选地,我们可以选择下载新版本或提供已经下载的具有新版本的tarball.(但只下载或只有tarball也可以)
具有安装和更新(新版本)的包也优选地由单个命令构建.
我一直在读一些关于phar,pear,phing的内容,但我不知道最好的方法是什么.连续集成服务器并不是必需的,但我认为在构建版本后会自动部署测试环境.
最初只需要更新php应用程序非常容易,最初填写配置文件时可以手动完成安装.