2017-08-14 74 views
0

说明:除了一些基本的代码语法之外,我对Ruby知之甚少。忍受我的白痴。在现有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以上的宝石,还是与特定Ruby版本绑定的宝石?可以有混搭吗?是否有某种迁移途径?
  3. 如何妥善管理两个不同的并发版本(如何分辨一个应用程序来使用一个版本比其他,或防止自动尝试使用新版本,并打破如果他们不兼容现有应用程式)。
  4. 任何最佳安装实践(我通常从源代码编译,但我愿意提供建议)。
  5. 是否有可能在不更新整个Ruby应用程序的情况下更新Ruby的OpenSSL库?它目前在OpenSSL 0.9.8o上,所以它显着落后于时代。

服务器运行的是Debian 6.0.6(尽管我对红帽和CentOS更熟悉,所以有关此问题的任何关于包管理的提示都会受到欢迎)。

回答

4
  1. 现代红宝石已经“成熟”而变得非常稳定。从2.0.0 - >(最新稳定版)2.4.1升级通常相当容易。然而,红宝石经历了从1.8 - >1.9 - >2.0相当主要(必要的!这部分升级可能会有问题。
  2. 宝石安装在当前的ruby安装中。举例来说,您目前拥有CanCan的“ruby 1.8版本”。如果您更新此应用程序的ruby版本,则需要重新安装所有宝石(推测可以通过bundle install)获取ruby版本。迁移路径基本上是:尽可能全面地获得测试套件;尽可能在宝石版本中升级宝石;更新ruby版本;如有必要修复测试和/或代码;重复。
  3. 使用类似rvmrbenv的工具在一台机器上安装多个并发ruby版本。
  4. 请参阅第3点。您可能不需要从源代码编译任何东西。
  5. 红宝石1.8 。对它的支持在2013年下降了。您的应用程序现在无疑会拥有大量过时的图书馆,并带有各种安全漏洞 - 当您未更新6年以上时会发生这种情况!从安全角度来看,我不会建议尝试为这个OpenSSL问题找到一些解决方法,并忽略这里的更大问题。
+0

显然,系统自己的OpenSSL库仍然在0.9.8o。啊。所以很显然,系统需要更大范围的检修 - 但这将是一个更大的过程,我只是想找到一个临时修复程序来解决我们开发人员的一个直言不讳的问题。 我正在将OpenSSL 1.0.2l安装到系统上的单独文件夹/usr/local/openssl/1.0.2l中。有没有办法更新现有的Ruby安装来简单地指出这一点? – jhilgeman

+0

显然,我没有安装“rvm”或“rbenv”。 – jhilgeman

+0

OpenSSLs ABI也在0.9.8和1.0.2之间变化。因此,如果没有重新编译,你已经编译好的Ruby 1.8可能无法(正确)使用OpenSSL 1.0.2。 –