我已经设置了一个rails生产环境:
*名为deploy的用户下的rails应用程序
*部署用户只是没有sudo权限的普通用户
*部署用户使用自己的沙盒rvm(无系统范围),因此任何ruby都只在部署用户之下。
*运行apache的用户无法访问ruby环境,因为apache不需要ruby,所以不需要访问权限。
*部署用户运行独角兽群集。
这个rvm非系统范围的配置对我很有用。我看到的优点是:
*每次安装宝石时我都不需要使用sudo
* Ruby是沙盒装,仅供部署用户使用,因此通过最小化提高了系统的安全性。 Apache不关心ruby,因此它无法访问它!
我看到的唯一缺点是我们不能使用乘客apache模块或乘客nginx模块,但随后乘客独立拯救!
我的问题: 为什么互联网上的每个人都倾向于使用RVM系统范围的安装? 我找不到一篇关于RVM在生产中以非sudo模式使用的帖子。 我错过了最关键的一块吗?我想知道生产中非sudo rvm安装的不太好。
谢谢!
答案 0 :(得分:15)
我总是为部署做一种混合:
这样你就可以:
如果您在特定用户下安装RVM,则不能在该用户之外使用ruby。
答案 1 :(得分:4)
我也使用rvm作为本地用户,但我能够整合乘客(版本2.x)。这个页面有帮助吗? https://rvm.beginrescueend.com/integration/passenger/
我可以深入了解我的配置文件(周末)并在遇到困难时帮助你。让我知道。
对评论的回复
我做了非系统范围的rvm-install,因为:
我没有看到任何问题,但我认为系统范围的RVM和非系统范围的RVM可以在生产中无故障地工作。
我使用的是Apache,而不是Nginx。另外,我不使用Unicorn。这两种差异都可能给你带来一些可能不会影响我的问题。
答案 2 :(得分:3)
不要忘记RVM不仅仅是关于rails或某些基于机架的应用程序,由于不同的工具(Web服务器等......),但是对于红宝石环境而言,部署的应用程序大多是透明的。
弄清楚,例如一个用ruby编写的线程服务器,看着串口,它必须作为守护进程运行,如果你想从init.d或者只是从boot.local用init脚本启动它,请相信我这是一个与su - rvm_user -c"whatever
一起玩的头痛并且通常是不可能的。在这些时刻,您重新考虑RVM安装,至少在生产环境中。