我们是一个由4名开发人员组成的小型团队,致力于Web应用程序。我们在共享服务器上使用trac + svn进行版本控制和票务,我们很高兴并对此感到满意。相同的共享服务器也托管我们的Web应用程序。应用程序本身是一个Perl CGI应用程序,它使用CGI :: Application和中等数量的标准(CPAN)和定制的Perl模块,这些模块安装在通常的(/ usr / lib / perl ...)和一些不寻常的位置( / home / user中/ lib中/ perl的..)。虽然广泛的细节可能无关紧要,但最重要的一点是我们的开发机器上的库的位置/布局与生产(共享)服务器上的库的位置/布局不同。我们必须忍受这一点。但是,库布局在所有开发机器上都是相同的。
这是我和我的同事遵循的一个典型的,但显然是次优的工作周期:
svn export
”放到服务器的相应DocumentRoot上显然,必须有更好的方法,并希望听到其他人可能比我们更好地处理这个问题。例如,有没有办法svn export
并以自动方式修复库位置?或者是否有一些完全不同的方式来处理这种情况,而不是到目前为止。
感谢您的关注
答案 0 :(得分:4)
您应该拥有可以从本地框运行的脚本。我总是看起来像:
$> checkout from source or copy from working
$> run sed/perl -pi/copy to convert configs to the production values
(ie cp production.config myconfig)
$> upload to web server (rsync/ssh/ftp/etc)
$> ssh $SERVER migrate_db, set permissions, run unit tests, etc
最后一个需要ssh访问,我一直在寻找,但其他一切都可以在本地完成。您通常会有一组开发配置和一组生产配置(或从开发转换为生产的脚本
一步上传始终是真正好主意。
答案 1 :(得分:3)
保留一个存储所有依赖于系统的路径和变量的配置文件(例如config.pl)。然后在此文件上设置svn:ignore属性,以便永远不会提交。这将允许您轻松地保留每个系统的本地配置脚本,该脚本与提交的树分开。
答案 2 :(得分:2)
如果您无法在生产中镜像开发服务器,为什么不能在开发中镜像生产服务器?这可能需要一些重新配置,但风险是什么?一切都检查成svn。
但也许真的,真的不适合你。我对部署Web应用程序的偏好是进行svn checkout,然后运行符号链接脚本。我们的想法是编写一个规则系统,将一个文件夹的内容逻辑映射到另一个文件夹的内容。当然,如果您在文档根目录中删除文件夹符号链接,则必须告诉Apache遵循它们。
坦率地说,绝对最安全的方案是设置一个可以像生产机器一样配置的虚拟机。这样,您就可以实际测试部署脚本的内容并提交票证。然后,当发现问题时,您修改脚本,使开发部署更有可能遵循新的和改进的过程。
而且,作为旁注:我更喜欢使用svn checkout而不是svn export。它应该不难(特别是如果您使用部署脚本)以确保apache或您的Web服务器没有.svn文件夹的权限。理想情况下,使用svn回滚单行命令所能做的任何事情都是关键。
答案 3 :(得分:1)
如果这是一个Linux盒子,你可以编写一个cron作业来为你处理这个问题。您可以使用sed / awk替换代码中所需的字符串,并且svn导出可以从cron作业中正常工作。您需要维护脚本,但它似乎比每次手动执行都快。
答案 4 :(得分:1)
对于手工编辑部分,我会在Subversion中有一个单独的分支,用于您需要的本地修改。开发人员进入trunk并在需要部署时,使用'svn merge'或svnmerge.py将更改从trunk合并到分支。
第一次创建分支后,在那里进行本地修改。
在服务器上,让DocumentRoot和/ usr / lib / perl以及/ home / user / lib / perl中的目录成为从分支机构检出的Subversion工作副本。
不要使用svn export,只需要一个checkout,这样你就可以'cd / usr / lib / perl; svn up'。
要注意的一件事是不要在DocumentRoot中公开你的.svn目录,使用它:
# Prevent any access to .svn directories.
<DirectoryMatch "^/.*/\.svn/">
Options None
AllowOverride None
Order allow,deny
Deny from all
</DirectoryMatch>
在DocumentRoot中部署工作副本也很不错,如果你需要回滚更改,只需'svn up -r PREV'。
答案 5 :(得分:1)
代码商提供企业级颠覆和按需交易。此外,我们现在能够通过ftp,scp,rsync和许多其他方法一键单击发布/部署代码。这将是一种简单快捷的方式,让您完成您想要做的事情。
请参阅我们的代码发布商功能:
https://help.codesion.com/View.jsp?procId=01fabe5e83381dda4edda959b97b2c5b