为什么部署Ruby on Rails到生产环境被认为是“困难”的?

9

我承认在部署测试与生产代码方面,我没有遵循任何“正确”的方法。我一直在使用ASP.NET,并且通常在Visual Studio中本地运行它,然后将其上传,再在生产服务器上进行测试。

我读过几篇文章说,部署Rails应用程序更难,ruby网站上有特殊的程序/方式可供部署RoR。我只是玩过RoR。部署有什么特别之处吗?你不能只是从开发机器复制并粘贴代码然后运行它(从开发到生产)吗?这是因为一个在Apache上,另一个在内置服务器上运行吗?

如果有影响,这将在Mac服务器上进行。

7个回答

14

现在部署RoR已经不再困难,特别是使用Phusion Passenger

有些困难的是使用capistrano、vlad等工具搭建自动化生产环境。如果你不介意把代码简单地复制到服务器上,那么这样做完全没问题。但是大多数人选择不这样做,因为这样会失去许多自动化部署工具所提供的好处。


1
我甚至使用Capistrano来设置新的Rails应用程序以进行自动部署。因此,我只需输入“cap setup:fresh”,它就会处理一切,例如设置测试URL、设置本地Git存储库,在我的源服务器上进行初始提交,设置新的虚拟主机等等... - Stefan Ladwig

7
我猜人们认为Rails应用程序比一些PHP应用程序更难部署,或者说你只需将代码放在某个地方,然后将Apache或其他东西指向它。但是,如上所述,现在您可以使用Phusion Passenger做到这一点。
我们使用Nginx+Passenger,但不是为了部署的简单性。 Capistrano是我们选择的部署工具,实际上,除非您有一个非常简单的应用程序,否则您肯定会需要像Capistrano这样的工具。例如,在我们的部署中,我们做了很多事情:
- 运行任何数据库迁移 - 自动生成发布说明,基于上次部署和本次部署之间提交的所有Git提交 - 通过cap_gun通过电子邮件通知各种人(具体取决于部署是否针对我们的暂存环境或生产环境)与Capistrano集成。 - 通知New Relic RPM进行部署,以便它可以在我们的RPM分析中标记它 - 通知Hoptoad进行部署,因此它在报告任何异常时也可以拥有这些数据 - 生成我们的sitemap.xml文件,并向Google发出通知,告诉他们有新的文件 - 更新crontab文件(我将每个服务器的crontab文件存储在我们的git repo中,然后在部署时,它会查看是否有新版本并相应地更新等)。 - 刷新/重启memcached
除了Capistrano之外还有其他方法,但是它是一种经过验证的工具,具有很大的灵活性,但设置一个简单的配置非常简单。
因此,我的看法是,一旦您进入任何超出最简单应用程序的应用程序,您将需要/想要执行其他操作而不仅仅是简单地更新代码。不过,在开始时,如果您只需要代码更新和可能的Rails迁移,则可以执行更简单的操作,例如Passenger和代码同步,或查看像Heroku或Engine Yard的工具,他们通过执行Git克隆来进行部署(然后提供一些附加功能)。

3

Heroku非常棒,我已经使用了几周,与之一起工作是完全的乐趣。 - Jimmy
14
抱歉给你踩了一下,但每次我看到有人建议在Heroku上部署Rails应用时,我就会想:“是的,在Heroku上部署很简单,但仅限于在Heroku上部署。” Heroku只是一项服务,并不能在VPS、自己的服务器等其他地方提供通用的应用程序部署方式。 - pistacchio

1

在将Rails部署到生产环境中,你可能会遇到以下问题:

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

  • 数据库迁移。 即使你已经在生产/测试/预发布环境中运行了数据库迁移,你仍然需要对生产数据库运行它们。

  • Ruby版本。 Ruby的版本或子版本可能会导致一些问题,例如 在安装debugger-linecache(1.1.1)时发生错误,Bundler无法继续

  • Gem依赖。 你的生产环境可能与开发环境有不同的软件包和gems。Bundler会在很大程度上解决这个问题并安装依赖项,但偶尔仍会出现需要手动解决的问题。

  • 依赖关系。 某些机器上的某些gems具有特定的依赖关系。我曾经看到过在我的unix系统上使用的gems在OSX上工作的频繁问题,反之亦然。

请注意,如果在同一台机器上,则最后3个问题不会影响你,但基于标题和全面性,我还是将其包括在内。


我从未使用过它。那只是当时的炒作。随着时间的推移,它失去了流行度,在我看来,除了RoR之外,我再也找不到使用它的理由了。并不一定喜欢RoR和约定优于配置(我想那就是RoR)。谢谢。 - johnny

0

这并不是特别难。如果你遵循惯例,然后进行一点配置,它就简化为以下内容:

cap deploy

...然而,有时需要一些努力来安排好工作流程。

好消息是,许多人已经打包了RoR的解决方案和堆栈,您可以直接插入并使用。例如,搜索google ec2onrails - 这是一个打包的Ubuntu镜像和一组capistrano任务,用于在Amazon的EC2云中运行rails应用程序,并且已经预先设置了许多常见的内容。

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


0

部署Rails应用程序的简单方法是使用Phusion Passenger。对于任何编程语言或框架,部署都不会比这更容易。您可以在Mac服务器上完成此操作。


0
另一种非常简单的部署Rails的方法是使用JRuby和Glassfish gem。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接