为什么将Ruby on Rails部署到生产中应该“难”?

时间:2009-06-18 16:36:33

标签: ruby-on-rails deployment

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

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

如果重要的话,这将在Mac服务器上。

7 个答案:

答案 0 :(得分:15)

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

有些困难,是使用capistrano,vlad等设置自动化生产环境。如果您不介意只是将代码复制到服务器,那么就可以做到这一点。大多数人选择不这样做,因为你失去了自动部署工具给你带来的许多好处。

答案 1 :(得分:7)

我猜人们认为Rails应用程序比部署PHP应用程序更难以部署,或者只是将代码放在某处并指向Apache或其他任何内容。但是,如上所述,你现在可以使用Phusion Passenger来做到这一点。

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

  • 运行任何数据库迁移
  • 根据上次部署与此之间Git的所有提交自动生成发行说明
  • 通过电子邮件通知各种人(根据部署是否属于我们的临时环境或生产,使用不同的列表) - 我们通过与Capistrano集成的cap_gun来实现此目的。
  • 通知部署的新Relic RPM,以便在我们的RPM分析中标记它
  • 通知部署的Hoptoad,因此在报告任何异常时也可以拥有该数据
  • 制作我们的sitemap.xml文件,然后ping Google以告诉他们有一个新的
  • 更新crontab文件(我在git repo中存储每个服务器的crontab文件,然后在部署时查看是否有新版本并相应更新等。)
  • flush / restart memcached

除了Capistrano之外还有其他方法,但它是一个经过验证的工具,具有很大的灵活性,但设置一个vanilla配置非常简单。

所以,我的看法是,一旦你进入任何超出最简单的应用程序的应用程序,你将需要/想要做的事情,而不仅仅是简单地更新代码。但是,如果您只需要代码更新,也许还需要Rails迁移,那么您可以执行更简单的操作,例如Passenger和代码同步,或者查看Heroku或Engine Yard等工具,通过执行Git克隆进行部署(然后提供一些额外的能力)。

答案 2 :(得分:4)

另一种非常简单的部署方法是使用http://heroku.com/

答案 3 :(得分:0)

这并不是特别难。如果您坚持惯例,那么只需稍加配置就可以归结为:

cap deploy

...但是,有时需要先付出一些努力才能完成工作流程。

好消息是很多人已经为RoR打包了解决方案和堆栈,您可以即插即用。例如,谷歌ec2onrails - 这是一个打包的Ubuntu图像和一套capistrano任务,用于在亚马逊的EC2云中运行rails应用程序,已经开箱即用了很多常见的东西。

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

答案 4 :(得分:0)

部署Rails应用的简便方法是使用Phusion Passenger。部署并不比任何编程语言或框架容易得多。您可以在Mac服务器上执行此操作。

答案 5 :(得分:0)

部署rails的另一个非常简单的方法是使用jruby和glassfish gem。

答案 6 :(得分:0)

将rails部署到生产中时遇到的一些问题:

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

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

  • Ruby版本。版本或子版本或Ruby可能会让您失望,例如An error occurred while installing debugger-linecache (1.1.1), and Bundler cannot continue

  • 宝石依赖。 您的生产环境可能与开发有不同的包和宝石。 Bundler将在很大程度上解决这个问题并安装依赖项,但有时仍然存在必须手动解决的问题。

  • 依赖关系。 某些机器上的某些宝石具有特定的依赖性。我已经看到在我的unix盒上使用gems时经常遇到问题,这些问题可以在OSX上运行,反之亦然。

请注意,如果在同一台机器上,最后3个不应该影响您,但我会根据标题包含它们并且是全面的。