为什么RVM系统范围广?

时间:2011-06-17 14:22:10

标签: ruby apache deployment rvm

我已经设置了一个rails生产环境:
*名为deploy的用户下的rails应用程序 *部署用户只是没有sudo权限的普通用户 *部署用户使用自己的沙盒rvm(无系统范围),因此任何ruby都只在部署用户之下。
*运行apache的用户无法访问ruby环境,因为apache不需要ruby,所以不需要访问权限。
*部署用户运行独角兽群集。

这个rvm非系统范围的配置对我很有用。我看到的优点是:
*每次安装宝石时我都不需要使用sudo * Ruby是沙盒装,仅供部署用户使用,因此通过最小化提高了系统的安全性。 Apache不关心ruby,因此它无法访问它!

我看到的唯一缺点是我们不能使用乘客apache模块或乘客nginx模块,但随后乘客独立拯救!

我的问题: 为什么互联网上的每个人都倾向于使用RVM系统范围的安装? 我找不到一篇关于RVM在生产中以非sudo模式使用的帖子。 我错过了最关键的一块吗?我想知道生产中非sudo rvm安装的不太好。

谢谢!

3 个答案:

答案 0 :(得分:15)

我总是为部署做一种混合:

  • 我安装了RVM系统(但仅适用于 rvm 组中的用户)
  • 我创建了一个专用用户,它是各种组的一部分:rvm,db(mysql,postgres,或者你使用的任何东西),nginx等......

这样你就可以:

  • 执行所有与Web相关的管理任务,而不使用sudo或root
  • 使用capistrano而无需担心特权或ruby命令的运行
  • 保持对权限的控制并从任何地方使用ruby
  • 完美地使用捆绑器

如果您在特定用户下安装RVM,则不能在该用户之外使用ruby。

答案 1 :(得分:4)

我也使用rvm作为本地用户,但我能够整合乘客(版本2.x)。这个页面有帮助吗? https://rvm.beginrescueend.com/integration/passenger/

我可以深入了解我的配置文件(周末)并在遇到困难时帮助你。让我知道。

对评论的回复

我做了非系统范围的rvm-install,因为:

  1. 符合我的开发环境。
  2. 我更喜欢“从源头轻松构建而不影响系统范围的安装”的做事方式。
  3. 很容易从提供Ruby的发行版切换到生产中提供Ruby的本地RVM,并且如果它不起作用则能够切换回来。
  4. 我没有看到任何问题,但我认为系统范围的RVM和非系统范围的RVM可以在生产中无故障地工作。

    我使用的是Apache,而不是Nginx。另外,我不使用Unicorn。这两种差异都可能给你带来一些可能不会影响我的问题。

答案 2 :(得分:3)

不要忘记RVM不仅仅是关于rails或某些基于机架的应用程序,由于不同的工具(Web服务器等......),但是对于红宝石环境而言,部署的应用程序大多是透明的。

弄清楚,例如一个用ruby编写的线程服务器,看着串口,它必须作为守护进程运行,如果你想从init.d或者只是从boot.local用init脚本启动它,请相信我这是一个与su - rvm_user -c"whatever一起玩的头痛并且通常是不可能的。在这些时刻,您重新考虑RVM安装,至少在生产环境中。