【问题标题】:Should I have installed RVM as multi-user?我应该将 RVM 安装为多用户吗?
【发布时间】:2011-05-26 23:15:26
【问题描述】:

我把自己描绘成一个有点烦人的角落。

我开始使用 RVM,现在我的一个应用程序愉快地坐在它自己的 Ruby 1.8.7@appname gemset 中。我可以从头开始制作 gemset 并执行 bundle install 来安装所有 gems。一切都很好。

因此,在托管应用程序的服务器上,在带有乘客的 nginx 下,我在拥有应用程序文件夹的用户“deploy”下安装了 RVM。然后我用 bundle install 安装了所有的 gem。然后,我将 nginx 配置更改为指向应用程序的新版本,即在 RVM 下运行的应用程序。 BAM!,乘客开始抱怨没有宝石。

我认为问题在于 nginx 以 root 身份运行,它没有定义 RVM。 “没问题”我想,我会将应用程序的 RVM 设置为系统默认值。所以,我切换到root,然后rvm --default 1.8.7@appname。我得到了:

rvm: command not found

返回,所以,看起来 RVM 只是为“部署”用户安装的。我想我应该按照 RVM 的install document 为所有用户安装它。

我必须从头开始吗?即,我是否应该切换回“部署”用户,卸载 RVM 及其所有痕迹,然后以 root 身份重新安装它?或者我可以在正确的 RVM 中运行 nginx/passenger 吗?

【问题讨论】:

    标签: ruby nginx passenger rvm


    【解决方案1】:

    前言:我不是当前的乘客用户。所以追随的东西只是想法和回忆。

    首先:如果我没记错的话,只有 nginx 的主进程以 root 身份运行,但子进程在您可以在 nginx 配置中设置的用户/组 ID 下运行。 (如果你关心安全,你应该这样做!)

    不知道这是否会影响乘客模块 - 会说,它应该,因为主进程仅用于跨越将完成实际工作的工作进程。也不能说,如果乘客的帮助程序以与工作人员相同的用户权限运行。 (出于与第一段相同的原因,它应该。)

    您应该在 nginx 中使用 passenger_default_user 设置。它应该避免您的用户麻烦。

    其次试试https://rvm.beginrescueend.com/integration/passenger/下的tips

    它们可能会有所帮助,尤其是在用户安装 RVM 的情况下。

    请仔细阅读注意事项疑难解答FAQ部分!

    我的第三点:我更喜欢在生产系统上安装 RVM。因此,您可以为不同的(系统/服务)用户构建不同的设置,而不会遇到用户范围的问题。

    最后但并非最不重要的一点:我过去在 RVM-passenger-nginx 设置方面的体验并不好。此外,我不是超载的网络服务器/负载平衡器的朋友,因此永远不会再使用 nginx 乘客模块。远离不属于它的东西。

    Alos 请记住,passenger-nginx 模组会扼杀在 nginx+passenger 中使用不同 rubies 和 ruby​​ 版本的能力。会说在这种情况下使用 RVM 意义不大。我更喜欢只使用 nginx 作为代理,让 unicorn/thin/whatever-else 来做 webserver 的工作。

    结论

    我会说,这不是 root 用户的问题。我认为,您的设置中的某些内容丢失或配置错误。

    回答您最后的问题:不,我认为没有必要安装系统 rvm,是的,应该可以使用正确的(用户)rvm 在 nginx 中运行乘客。

    【讨论】:

    • “我希望在生产系统上安装 RVM。”。除非绝对必要,否则我不会在生产主机上使用 RVM,因为我不会过多地更改 Ruby 或 gem 配置(如果有的话)。如果我需要多个红宝石,我会将它们安装到我的 /local/opt 路径中的单独路径中,并直接在 #! 行中引用它们,或者使用 PATH 启动应用程序的会话或使用启动 shell 对其进行调整脚本。这只是我的 0.02 美元。
    • 这听起来更复杂,我认为这就是开发 RVM 的原因:更容易管理多个红宝石。
    • @the Tin Man - 谢谢。我最终没有在服务器上使用 rvm:因为它只托管一个站点,所以没有必要,它只是增加了复杂性。在本地使用 rvm 仍然非常宝贵,因为这允许我镜像生产服务器的环境,但在服务器上放弃它只会让生活变得更轻松。感谢您帮助我思考。
    【解决方案2】:

    默认情况下,Passenger 在与文件 config/environment.rb 的所有者相同的 UID 下运行 Rails 应用程序,因此您可以将应用程序保留在 deploy 用户下。请参阅乘客文档中的User switching 部分。

    此外,在ngnix 配置中设置passenger_ruby 变量以指向RVM ruby​​ 二进制文件也很重要,例如:

    passenger_ruby /home/deploy/.rvm/bin/passenger_ruby;
    

    更多详情请参阅RVM Passenger integration documentation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-19
      • 1970-01-01
      • 2012-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多