【问题标题】:Running Newer Ruby Version Next to Existing Ruby Version在现有 Ruby 版本旁边运行较新的 Ruby 版本
【发布时间】:2017-08-14 16:06:14
【问题描述】:

披露:除了一些基本的代码语法之外,我对 Ruby 知之甚少。忍受我的白痴。

Ruby 1.8 的 OpenSSL 库似乎不支持 TLS 1.2。但是,有些应用程序运行依赖于 1.8,所以我想看看我是否可以在同一系统上同时运行较新版本的 Ruby,并使用相同 gem 的较新版本进行设置。

当前版本 1.8 位于 /usr/lib/ruby/1.8。理想情况下,我想保持相同的结构并安装更新的版本(不确定最新的稳定版本是什么 - 无论是 2.3.x 还是 2.4.x)。

也就是说,我不是 Ruby 管理员。我从其他人那里继承了一台服务器,尽管公司内部没有其他 Ruby 经验,但他们认为 Ruby 是做事的最佳方式,然后他们离开了。我知道一些系统管理员的东西,但我不知道:

  1. 向后兼容的 Ruby 版本如何(例如,针对 1.8 构建的应用是否可以在 2.4.1 上运行而无需进行任何重大修改)。
  2. 宝石如何工作/更新。 2.4.1 可以使用 1.8 中的 gem,还是 gem 绑定到特定的 Ruby 版本?可以混搭吗?是否有某种迁移路径?
  3. 如何正确管理两个不同的并发版本(如何告诉应用使用一个版本而不是另一个版本,或防止现有应用自动尝试使用新版本并在它们不兼容时中断)。
  4. 任何最佳安装实践(我通常从源代码编译,但愿意接受建议)。
  5. 是否可以只更新 Ruby 的 OpenSSL 库而不更新整个 Ruby 应用程序?它目前在 OpenSSL 0.9.8o 上,因此已经远远落后于时代。

服务器运行的是 Debian 6.0.6(不过,我更熟悉 Red Hat 和 CentOS,因此欢迎任何与此问题相关的软件包管理等提示)。

【问题讨论】:

    标签: ruby openssl


    【解决方案1】:
    1. 现代红宝石已经“成熟”并变得非常稳定。从2.0.0 升级-->(最新稳定版)2.4.1 通常很容易。然而,ruby 经历了相当大的(必要的!)变化,从1.8 --> 1.9 --> 2.0;这部分升级可能会出现问题。
    2. Gems 安装在当前的 ruby​​ 安装中。例如,您当前拥有CanCan 的“ruby 1.8 版本”。如果您更新此应用程序的 ruby​​ 版本,则需要重新安装 ruby​​ 版本的所有 gem(可能通过 bundle install)。迁移路径基本上是:获取尽可能全面的测试套件;在该 ruby​​ 版本中尽可能升级 gems;更新红宝石版本;如有必要,修复测试和/或代码;重复。
    3. 使用rvmrbenv 之类的工具在一台机器上安装多个并发的ruby 版本。
    4. 参见第 3 点。您可能不需要从源代码编译任何内容。
    5. Ruby 1.8 是旧的。对它的支持早在 2013 年就被取消了。毫无疑问,您的应用程序现在将拥有大量过时的库,以及各种安全漏洞——这就是您 6 年以上不更新它时会发生的情况!从安全的角度来看,我不建议尝试为这个 OpenSSL 问题找到一些解决方法,而忽略这里更大的问题。

    【讨论】:

    • 显然系统自己的 OpenSSL 库仍然回到 0.9.8o。啊。所以很明显,系统需要进行更大规模的检修——但这将是一个更大的过程,我只是想找到一个临时解决方案,为我们的开发人员解决一个令人头疼的问题。我正在将 OpenSSL 1.0.2l 安装到系统上的单独文件夹 /usr/local/openssl/1.0.2l 中。有没有办法更新现有的 Ruby 安装以简单地指向它?
    • 我显然没有安装“rvm”或“rbenv”。
    • OpenSSLs ABI 在 0.9.8 和 1.0.2 之间也发生了变化。因此,如果不重新编译,您已经编译的 Ruby 1.8 可能无法(正确)与 OpenSSL 1.0.2 一起工作。
    • 您需要从源代码重新编译 ruby​​,并且在快速 google 之后,可能应用一些 patch(es)?我以前从未尝试过,所以我不确定。但正如我所说,您无疑还有无数其他安全问题需要处理;长期修复肯定是正确升级或全部重写。
    猜你喜欢
    • 1970-01-01
    • 2015-12-26
    • 2013-12-06
    • 1970-01-01
    • 2014-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多