在生产中发布基于python / ruby​​ / script的Web应用程序时的实践

我纯粹是一个Windows程序员,花了我所有的时间来破解VC ++。

最近我一直在使用几个基于Web的应用程序,我自己使用python(/ pylons框架)构建应用程序并在rails上执行项目。 所有的web项目都托管在ubuntu linux上。

我们在构建和发布VC ++ windows应用程序时遵循的RELEASE过程和检查列表在基于脚本的语言方面仅仅没有用处。

所以我们现在不构建任何二进制文件。 我在使用开源cms应用程序时通过ftp服务器将asp / php文件复制到IIS文件夹中。

因此,FTP是将文件托管到Web服务器的方法之一。 现在我们感到懒惰或不那么热衷于通过ftp复制文件而不是我们使用SVN结账 ,我们只是做svn更新来获取最新的副本。

SVN checkout和svn update是将最新构建文件更新到服务器的正确方法吗? 使用svn更新有什么缺点吗? 有没有更好的方法将脚本/基于Web的脚本发布到生产服务器?

PS:我在linux平台的某个扩展上使用了ssh服务器。

我会在SVN中为每个Web应用程序版本创建一个分支,当发布就绪时,我会在服务器上检查它并设置为运行或将其移动到旧版本的位置。

SVN checkout和svn update是将最新构建文件更新到服务器的正确方法吗?

非常非常好的方法。 你知道你得到了什么。 你可以随时倒退。

使用svn更新有什么缺点吗? 没有。

有没有更好的方法将脚本/基于Web的脚本发布到生产服务器?

我们所做的。

我们没有用完SVN结帐目录。 SVN结帐目录是位于服务器上的“原始”源。

我们使用Python的setup.py install/opt/app/app-xy目录树中创建应用程序。 每个标记的SVN分支也是最终安装中的分支。

Ruby拥有gem和其他可能类似于Python的安装工具。

我们的网站的Apache和mod_wsgi配置是指特定的/opt/app/app-xy版本。 然后,我们可以暂存版本,进行测试,执行将数据从生产迁移到下一个版本等操作,并且通常做好准备。

然后我们调整Apache和mod_wsgi配置以使用下一个版本。

以前的版本都已到位。 并留在原地。 有一天,当他们混淆我们时,我们会删除它们。

在您的Web根目录上执行svn更新的一个缺点是.svn目录可能会公开,因此请注意Web服务器上的权限 。

也就是说,有更好的方法来部署使用动态语言构建的应用程序。 在Rails世界中, Capistrano是一个成熟的部署工具,以及Vlad the Deployer 。 Capistrano可以轻松用于非rails部署

有许多基于版本控制的部署策略。 您可以浏览教程并获得一些想法。

我还想补充一点,即使我们没有用动态语言“构建”(编译)项目,我们也会“构建”(测试/集成)它们。 一个严肃的项目将使用持续集成服务器在每次提交或集成之前,在生产之前validation项目的集成“构建”。

做一个svn更新的一个缺点:虽然你可以回到过去,你会回到什么版本? 你必须查找它。 如果使用标签,svn update伪部署工作会更加清晰 – 在这种情况下,您将在不同的标签上进行svn切换,而不是在同一分支或主干上进行svn更新。

你想用1.1.4之类的版本号标记你的软件,然后有一个简单的脚本来压缩它app-1.1.4,压缩和部署它 – 然后你有自动可重复发布和回滚以及更大的了解版本之间的变化。