【问题标题】:Multiple Ruby versions on one webserver?一台网络服务器上有多个 Ruby 版本?
【发布时间】:2011-02-28 10:32:17
【问题描述】:

理想

使用 rvm,如果能够在一个 web 服务器上拥有多个 Ruby,并且通过某种服务器配置,能够为每个项目分配 Ruby 版本到不同的 Rails/Sinatra/etc 应用程序,那就太棒了。

从 rvm 的文档中我知道,Passenger 一次只能使用一个 Ruby。 :(

妥协

如果做不到这一点,至少能够编造一种能够将项目分配给 Ruby 1.8 或 Ruby 1.9 解释器的方法会很好。我读过使用 Nginx 作为反向代理允许在同一个机器上运行 Apache 和 Nginx。那么是否有可能让 Apache+Passenger 使用一个 Ruby,而 Nginx+Passenger 使用另一个?也许在 Nginx 中使用Passenger以外的东西?

我是在找错树了吗?

我是否缺少解决此问题的好方法?我是否陷入了噩梦般的配置情况?我想要的是否可行,或者是否有必要运行另一个盒子来运行单独的 Ruby 版本?

【问题讨论】:

  • 我不确定这是否可行,但是为每个要在每个不同的 ruby​​ 下运行的进程使用单独的用户帐户(或者每个 ruby​​ 可能只有 1 个用户?)将是一个好的开始.
  • 虚拟化是一种选择吗?如果有一个原因你不能运行多个 Ruby 版本,你可以用另一个版本运行一个虚拟服务器,这样每个操作系统安装只有一个。

标签: ruby apache nginx passenger reverse-proxy


【解决方案1】:

如果您使用的是 Mac OS X,您可能需要查看POW!,它可以处理多个红宝石。有一个名为 hoof 的 linux 替代方案,虽然没有那么发达,但正在接近。

【讨论】:

    【解决方案2】:

    查看这篇文章:Phusion Passenger & running multiple Ruby versions 来自 Phusion 官方博客。它通过使用Passenger Standalone作为反向代理解决了这个问题。

    【讨论】:

      【解决方案3】:

      使用多个小型虚拟机?

      【讨论】:

      • 如果是我,我会为 1.9 设置一个新的 VM/slice 并将应用程序迁移到那里。
      【解决方案4】:

      妥协是可能的。你可以通过多种方式实现,但最简单的可能是反向代理,结合尽可能多的 chrooted ruby​​+webserver+rails 安装。

      【讨论】:

        【解决方案5】:

        您可以在 Nginx 中使用 Thin 或 Unicorn。您可以编写一个上帝脚本或其他一些启动脚本来设置每个项目的 ruby​​ 版本(或简单地手动启动 Thin/Unicorn)。

        【讨论】:

        【解决方案6】:

        如何将所有项目(或至少在一台服务器上的项目)保持在同一个 ruby​​ 版本上?是使用旧版本还是升级旧项目?

        我认为,这样你的问题最少。

        【讨论】:

        • 因为停留在 Ruby 1.8 上并不是很理想。而且因为不是所有在盒子上运行的东西都是我们自己的,而且我们花所有时间使 Redmine 1.9 兼容(例如)并不完全可行。此外,至少在理想的设置中,在最初为它们编写的 Ruby 上运行项目会非常好。我的意思是,有了 rvm,服务器就有这些红宝石,如果能够让每个项目都使用它们,那就太好了!
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-27
        • 1970-01-01
        • 2018-11-02
        • 1970-01-01
        • 2021-09-28
        • 1970-01-01
        相关资源
        最近更新 更多