2011-01-20 76 views
1

我习惯于用C#.NET编写桌面应用程序。我在哪里有一个很好的小解决方案文件夹,它也受版本控制。因此,在任何时候,在任何计算机上,我都可以查看我的软件的任何版本,以便运行编译器并获得我的程序的工作副本。如何学习如何创建/部署/管理网站?

现在,我寻找到发展的网站,那里的文件和数据很多比较分散。我使用的是ASP.NET,但真正的问题是更一般的,可以应用于任何网站框架。

我试图理解发展我的网站,一个版本控制服务器,和实际生活的网站,用户将看到之间的适当工作流。显然这可能会有很大的不同,取决于网站的类型和规模,但我只考虑一个非常简单的网站。我刚刚开始使用这些东西。下面

图显示了我目前的想法。该站点的所有源文件都将存储在一个颠覆服务器上,我将检查到本地计算机上。我的本地计算机会有一个本地数据库,我将用它来开发该网站。接下来,我将发布到托管服务器上的测试版本,该版本将指向单独的测试数据库。这个测试数据库可能会定期替换为实时数据库的副本。

如果一切顺利,我会再发布到它指向实时数据网站的测试版。用户然后可以检查测试版本以提供反馈。最后,如果仍然没有问题,活动网站的源文件将被更新。

alt text

这是否有道理?有没有人有任何意见,如何可以改善?是否有任何好的书籍或在线教程可用于开发这些类型的工作流程?

另外,我真的不确定的一件事是如何管理对数据库实际模式的更改。我认为每个版本都可以生成一个SQL脚本,可用于更新主机上的测试和实时数据库。不过,我还希望能够为我的站点的任何版本轻松设置新的数据库,而无需为每个版本运行每个更新SQL脚本,直到达到所需的版本。使用像NHibernate或Subsonic这样的ORM是最好的解决方案,所以我可以直接从我的代码生成我的数据库模式?

回答

0

我目前使用的工作流程与此非常相似。这并不完美,但大多数情况下效果不错。这听起来像你很重要的部分了。

我在哪里工作,我们有一个强大的Web服务器。我们的Subversion Repos也存在于这台服务器上。对于我自己来说,作为LAMP开发人员,我使用本地MySQL数据库在本地Linux机器(或VM)上完成了所有的开发工作,并在本地工作副本上运行。

在任何时候,我都会维护应用程序的两个主要分支:Dev分支(中继线)和Live分支(反映当前生产版本)。我的回购协议是这样的:

/repo/trunk/  [My current active development version] 
/repo/archive/  [All other versions not in active development live here] 
/repo/archive/2010.12/ [This happens to be the current production version] 

在Web服务器上,我们维持软件的三个独立的实例:实时(或生产),Beta和开发。下面应该说明我们如何使用这些版本的

  • 开发 - 始终指向我们的`/回购/主干”开发版本。使用非血压配置文件指向开发数据库。然而发展在这里从来没有在身体上完成相反,我们在本地机器上工作,我们的工作副本指向中继,并在本地机器上进行所有开发测试。但是,在多个开发人员提交几次提交之后,在Dev服务器上进行测试以确保我们走在正确的轨道上并且没有人违反别人的更改是非常重要的。

  • 直播 - 始终指向最新的稳定版本。在这种情况下,它指向/repo/archive/2010.12/。这个版本是世界可访问的。

  • Beta - 大多数情况下,Beta将成为Live上的最新动态镜像,并指向我们存储库中的相同生产版本(/repo/archive/2010.12)。任何时候,我们需要在Live上修复错误,我们将它们放在这里,测试它们,然后在现场更新&。 (我们在必要时将它们合并到主干。)

当干线的版本被认为是完成并准备测试,我在版本库创建一个新的存档分支为即将到来的新版本(即2011.01)通过svn copy ing现有的生产分支。然后我将Trunk版本合并到新的分支中并进行提交,因此我们有一个版本反映了当前Dev上的内容。当然现在开发者可以继续在Dev上继续积极开发下一个版本,而Beta版测试这个新的存档版本。在测试完成后,我们会提交任何修复程序并将Live切换到新版本(/repo/archive/2011.01)。

现在,您可能已经发现数据库合并有点棘手。我们使用MySQL,据我所知,没有适合MySQL的版本控制系统。因此,每次迁移时(VM到Dev,Dev到Beta,Beta到Live),我将首先备份当前数据库,然后进行必要的更改。我个人使用的商业版本的SQLYog允许我同步数据库模式(超级方便)。

+0

谢谢这真的有很大的帮助。你说得对,这听起来像你正在做我打算做的事情。虽然这对我来说会更简单,因为我不必担心其他开发者,那么我自己也会回购。但是,对于如何在本地,测试版和产品之间管理对数据库模式的更改,我仍然不能100%确定。 – 2011-01-21 06:13:02