RVM生产准备好了吗?

RVM非常适合在本地计算机上进行开发。 但它在生产机器上是否安全?

我为生产构建了RVM,并在稍后添加了开发人员的“细节”。 如果您想了解更多信息,请阅读网站上的文档,并在EDT大部分时间的某个时间在irc.freenode.net上的#rvm中与我交谈。

由于RVM只是一种在现有Ruby实现之间进行下载,隔离和切换的奇特方式,我会说它就像你正在运行它的任何ruby实现一样准备就绪。

从本质上讲,所有RVM都指向特定Ruby实现的路径。 这正是您使用* nix发行版的Ruby实现时所发生的情况。 唯一真正的区别是你的路径将被重写,这样当你运行ruby -v ,它将从你当前用户的.rvm目录而不是像/ usr / local / bin这样的全局系统目录运行ruby。

我会更进一步说,使用RVM是比使用通常安装在* nix发行版中的更好的解决方案,因为它可以很容易地按用户沙箱化特定的ruby实现。 RVM还可以在您的生产应用程序上尝试切换ruby(即,从1.8.7到1.9.2),同时保持一个可靠的回滚策略,如果某些东西不能正常工作的话。 它还可以更容易地保持旧应用程序在一个版本的Ruby上运行,同时将新应用程序切换到更新的版本。

我不同意,特别是如果你正在使用任何一种自动化生产过程(木偶,厨师,雾等)并且你有一台或两台以上的机器。

我们遇到过这样的问题:RVM版本X的工作方式与RVM版本Y完全不同(不同的默认Rubygems版本,不同的默认gemset配置,系统范围安装的完整更改),打破了我们的自动配置流程。

如果您正在开发并随时调整内容,那么这不是一个问题,如果您有无人参与的脚本/木偶安装,那就是一个杀手锏。 我们通过锁定特定的RVM版本解决了这些问题,但我记得与Wayne进行了一次对话,他对此不予理睬。 如果我们继续在prod中使用RVM,我们实际上将它打包成一系列.debs(一个用于安装,一个用于每个Ruby)。

.rvmrc默认提示并且只能在homedir~ / .rvmrc(而不是系统范围的)中覆盖的方式也没有用。

我实际上喜欢RVM在开发过程中改变并以这种方式做事的方式 – 没有什么比向后兼容性所阻碍更糟糕了。 然而,这种方法花费了我们一些时间(和拉毛)生产/ staging / uat / test。

RVM显然是一种合理的生产工具

你知道,我曾经做过类似的rvm是一个开发工具评论,并被告知rvm最初是一个生产工具。

因此,RVM会使您的生产环境变得更加复杂,这很糟糕,但它使它更加孤立和分隔,人们称之为模块化的语言,这很好。

最后,只要您测试部署,我就不会看到任何类型的静态配置本身都是“不安全”的。

这完全取决于您如何安装RVM,单用户或多用户。 安装RVM系统可以在不同的ruby之间造成大量混乱。 更好地选择单个用户,减去RVM在它的意图上做得很好。

我想这个问题有两个部分:

  1. RVM是否适用于生产机器,而不是开发机器?
  2. RVM是否足够可靠,可以在生产机器上使用?

对于(1),Wayne E. Seguin表示它打算用于生产机器。 对他的意图提出异议毫无意义。

对于(2),我不太确定。 在生产机器上每隔几天使用具有新版本号的软件是否合适? 此外,RVM删除了我的整个〜/ ruby​​目录。 对Wayne来说,当我告诉他这件事的时候,他当晚修好了,但这并不能说明“生产准备好”给我。

编辑:我刚读过关于大黄蜂删除/ usr的内容,我只想说 – 它可能会更糟! 大声笑。

我已经在生产网络服务器上使用RVM超过一年了,现在没有问题。 我让它保持最新状态,经常运行rvm get head 。 零问题,永远。 🙂

是的,我在生产机器上使用了rvm,并且还设置了puppet模块来安装rvm作为默认系统ruby以及gemsets等。

如果您在单个服务器上运行多个应用程序,rvm可以帮助您将所有应用程序gemsets(和ruby版本)完全分开。 但是,如果您只在服务器上运行单个应用程序,则安装rvm可能没有那么多好处。

我在运行rails应用程序的所有生产服务器上都使用了RVM。 RVM并没有让我失望。