如何正确地将应用程序从开发部署到生产以及如何处理多个站点配置.我的所有开发都通过位于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
我正在使用LAMP开发一个多租户Web应用程序.我的所有用户会话数据当前都存储在具有表类型InnoDB的mysql中.
有没有什么方法可以使用MEMORY(以前是HEAP)表类型来存储当前会话并使用会话处理程序的垃圾收集器功能来移动InnoDB(常规表)和(in)MEMORY表之间的会话?
当我想在稍后阶段进行群集和主从配置时,此配置也会以任何方式受到影响吗?
在此先感谢,ocptime