Asp.net 如何学习如何创建/部署/管理网站?

Asp.net 如何学习如何创建/部署/管理网站?,asp.net,web,workflow,Asp.net,Web,Workflow,我习惯于用C#NET编写桌面应用程序。在那里我有一个很好的小解决方案文件夹,它也在版本控制之下。因此,在任何时候,在任何计算机上,我都可以检查我想要的任何版本的软件,运行编译器,并拥有我的程序的工作副本 现在我正在研究开发网站,那里的文件和数据更加分散。我正在使用ASP.NET,但实际上我的问题更一般,可以应用于任何网站框架 我正试图了解开发我的网站、版本控制服务器和用户将看到的实际实时网站之间的正确工作流程。显然,这可能会因网站的类型和规模而有所不同,但我只考虑一个非常简单的网站。我才刚开始做

我习惯于用C#NET编写桌面应用程序。在那里我有一个很好的小解决方案文件夹,它也在版本控制之下。因此,在任何时候,在任何计算机上,我都可以检查我想要的任何版本的软件,运行编译器,并拥有我的程序的工作副本

现在我正在研究开发网站,那里的文件和数据更加分散。我正在使用ASP.NET,但实际上我的问题更一般,可以应用于任何网站框架

我正试图了解开发我的网站、版本控制服务器和用户将看到的实际实时网站之间的正确工作流程。显然,这可能会因网站的类型和规模而有所不同,但我只考虑一个非常简单的网站。我才刚开始做这件事

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

如果一切顺利,我会发布一个测试版的网站,指向实时数据。用户可以查看beta版以提供反馈。最后,如果仍然没有问题,将更新live站点的源文件

这有意义吗?是否有人对如何改进这一点有任何意见?有没有关于开发此类工作流的好书或在线教程


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

我目前使用的工作流与此非常类似。它并非完美无缺,但在大多数情况下,它运行良好。听起来你已经把重要的部分弄清楚了

在我工作的地方,我们有一个功能强大的web服务器。我们的subversion Repo也在这台服务器上运行。对于我自己,作为LAMP开发人员,我在本地Linux机器(或VM)上使用本地MySQL数据库进行所有开发,并在本地工作副本上运行

我始终维护应用程序的两个主要分支:开发分支(主干)和活动分支(反映当前生产版本)。我的回购协议如下所示:

/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服务器上,我们维护三个独立的软件实例:Live(或Production)、Beta和Dev。下面应该说明如何使用这些版本

  • Dev-始终指向位于“/repo/trunk”的开发版本。使用非Vessed配置文件指向开发数据库。然而,发展从来不是在这里实际完成的;相反,我们在本地机器上工作,工作副本指向主干,并在本地机器上进行所有开发测试。但是,在多个开发人员多次提交之后,在开发服务器上进行测试以确保我们走上了正确的轨道,并且没有人破坏其他人的更改,这一点很重要

  • 实时-始终指向最新的稳定生产版本。在本例中,它指向
    /repo/archive/2010.12/
    。这个版本是全世界都可以访问的

  • Beta版-大多数情况下,Beta版都是直播内容的镜像,指向我们存储库中的同一生产版本(
    /repo/archive/2010.12
    )。任何时候我们需要在Live上修复bug,我们都会在这里进行修复、测试,然后提交并更新Live。(如有必要,我们还将它们合并到主干中。)

当Trunk中的版本被认为已完成并准备好进行测试时,我通过
svn copy
ing现有的生产分支,在存储库中为即将发布的新版本(即2011.01)创建一个新的归档分支。然后,我将主干版本合并到新的分支中并提交,这样我们就有了一个反映当前在Dev上的版本。当然,现在下一个版本的活动开发可以在Dev上继续,同时我们在Beta上测试这个新的存档版本。beta测试完成后,我们将提交所有修复并切换到新版本(
/repo/archive/2011.01


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

谢谢,这真的很有帮助。你说得对,听起来你正在做我计划做的事情。虽然这对我来说会更简单,因为我不必担心除了我自己以外的任何开发商会参与回购。但我仍然不能100%确定如何在本地、测试版和生产版之间管理对DB模式的更改。