Ruby on rails 为什么它被认为是;硬的;将RubyonRails部署到生产环境中?

Ruby on rails 为什么它被认为是;硬的;将RubyonRails部署到生产环境中?,ruby-on-rails,deployment,Ruby On Rails,Deployment,我承认,在部署测试代码和生产代码时,我没有遵循“正确”的原则。我一直在使用ASP.NET,我通常在Visual Studio中本地运行它,它可以工作,我上传它,我在生产服务器上再次测试它 我读过一些人说部署Rails应用程序比较困难,ruby站点上有一些关于部署RoR的特殊程序/方法。我只是玩弄过罗。部署有什么特别之处?您不只是复制和粘贴代码并运行它(从开发机器到生产机器)?是因为一个在Apache中,另一个在内置服务器上运行吗 这将在Mac服务器上进行,如果有必要的话。部署RoR不再困难,尤其

我承认,在部署测试代码和生产代码时,我没有遵循“正确”的原则。我一直在使用ASP.NET,我通常在Visual Studio中本地运行它,它可以工作,我上传它,我在生产服务器上再次测试它

我读过一些人说部署Rails应用程序比较困难,ruby站点上有一些关于部署RoR的特殊程序/方法。我只是玩弄过罗。部署有什么特别之处?您不只是复制和粘贴代码并运行它(从开发机器到生产机器)?是因为一个在Apache中,另一个在内置服务器上运行吗


这将在Mac服务器上进行,如果有必要的话。

部署RoR不再困难,尤其是使用


有点困难的是,使用capistrano、vlad等实现自动化生产环境设置。如果您不介意将代码复制到服务器上,您可以很好地完成这项工作。大多数人选择不这样做,因为您失去了自动化部署工具给您带来的许多好处。

这并不特别困难。如果您坚持惯例,那么通过一点配置,可以归结为:

cap deploy
…但是,有时需要提前一点努力才能使工作流就位

好消息是,很多人已经为RoR打包了解决方案和堆栈,您可以直接即插即用。例如,GoogleEC2OnRails——这是一个打包的Ubuntu映像和一组capistrano任务,用于在亚马逊的EC2云中运行rails应用程序,其中许多常见的东西都是现成的


选择一个好的托管提供商,你应该也能找到类似的东西。

部署Rails应用的一个简单方法是使用。对于任何编程语言或框架来说,部署都不会比这容易得多。你可以在Mac服务器上做到这一点。

< P>我想人们认为Rails应用程序比一些PHP应用程序更难部署,或者你只需在某处粘贴代码,指向Apache或其他什么。但是,如上所述,您现在可以通过Phusion Passen做到这一点

我们使用Nginx+Passenger,但不是为了简化部署。Capistrano是我们选择的部署工具,实际上,除非你有一个非常简单的应用程序,否则你无论如何都会想要类似Capistrano的东西。例如,通过部署,我们可以做很多事情:

  • 运行任何数据库迁移
  • 根据上次部署和这次部署之间对Git的所有提交,自动生成发行说明
  • 通过电子邮件通知不同的人(根据部署到我们的暂存环境还是生产环境,列出不同的列表)-我们通过与Capistrano集成的cap_gun实现这一点
  • 将部署通知New Relic RPM,以便它可以在我们的RPM分析中标记它
  • 将部署通知Hoptoad,以便它在报告任何异常时也可以拥有该数据
  • 生成我们的sitemap.xml文件,并ping Google告诉他们有一个新的
  • 更新crontab文件(我将每个服务器的crontab文件存储在git repo中,然后在部署时查看是否有新版本,并相应地进行更新,等等)
  • 刷新/重新启动memcached
除了Capistrano,还有其他方法,但它是一个经过验证的工具,具有很大的灵活性,但设置普通配置非常简单


因此,我的观点是,一旦你进入任何应用程序,而不仅仅是最简单的应用程序,你将需要/想要做一些事情,而不仅仅是简单地更新代码。不过,在一开始,如果您只需要代码更新,或者Rails迁移,那么您可以做一些简单的事情,比如乘客和代码同步,或者看看Heroku或Engine Yard之类的工具,它们通过Git克隆进行部署(然后提供一些附加功能)部署rails的另一个非常简单的方法是使用jruby和glassfish gem

另一种超级简单的部署方式是将rails部署到生产环境中时遇到的一些问题:

  • 数据库连接。 您需要确保为生产环境设置了数据库连接器

  • 数据库迁移。 您必须针对生产数据库运行数据库迁移,即使您可能已经在生产/测试/暂存中运行了数据库迁移

  • Ruby版本。版本或子版本或Ruby可能会让你绊倒,例如

  • 宝石依赖。 您的生产环境可能有不同于开发环境的包和gem。Bundler将在大部分情况下解决这一问题,并安装依赖项,但偶尔仍有一些问题需要手动解决

  • 依赖关系。 某些机器上的某些gem具有特定的依赖关系。我经常看到在我的unix设备上使用gems时出现问题,而这些设备在OSX上工作,反之亦然


注意:如果在同一台机器上,最后3个应该不会影响您,但我根据标题将它们包括在内,这是为了更全面。

我甚至使用capistrano来设置一个新的railsapp以自动部署。所以我说“cap setup:fresh”,这将解决所有问题,比如设置testurl、设置本地gitrepository和在我的源服务器上、进行初始提交、设置新vhost等等……heroku非常棒,我已经使用它好几个星期了,与Sorry一起为否决票工作是一件非常愉快的事情,但每次我读到关于rails部署的文章,有人建议heroku,我都会忍不住想“是的,heroku是一种在heroku上部署的简单方法”。heroku是一种服务,不是在vps、自有服务器等任何地方部署应用程序的通用方式。我从未使用过它。那只是当时的炒作。随着时间的推移,它失去了人气,imho,所以除了RoR,我再也找不到使用它的理由了。不一定喜欢RoR和convention而不是co