在 ubuntu 22.04 上安装 ruby​​ 的正确方法是什么

art*_*net 12 ruby ubuntu openssl ruby-on-rails pg

使用 rvm 在 ubuntu 22.04 上安装 ruby​​ 时出现问题,因为它会给出以下错误 在此输入图像描述

Error running '__rvm_make -j8',
please read /usr/share/rvm/log/1655413907_ruby-2.5.0/make.log

There has been an error while running make. Halting the installation.
Run Code Online (Sandbox Code Playgroud)

如果我尝试安装 ruby​​ 2.7.0、2.7.1,也会出现同样的错误。2.7.2 及更高版本。

我在这里找到了使用以下步骤的建议

rvm pkg 安装 openssl

rvm 删除 xxx

rvm install xxx -C --with-openssl-dir=$HOME/.rvm/usr

这使得安装成功,但一些库(如 pg、rails 或 puma)无法与以这种方式安装的 ruby​​ 版本一起使用。例如,在捆绑安装后,如果运行命令“rails db:migrate”,它将给您带来来自 pg gem 的另一个错误 - Segmentation failure

/usr/share/rvm/gems/ruby-2.5.0/gems/listen-3.1.5/lib/listen/record.rb:113: [BUG] Segmentation fault at 0x00007f03df83e140
ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-linux]

-- Control frame information -----------------------------------------------
c:0011 p:0009 s:0055 e:000053 METHOD /usr/share/rvm/gems/ruby-2.5.0/gems/listen-3.1.5/lib/listen/record/entry.rb:53
c:0010 p:0014 s:0047 e:000046 METHOD /usr/share/rvm/gems/ruby-2.5.0/gems/listen-3.1.5/lib/listen/record/entry.rb:18
c:0009 p:0039 s:0042 e:000041 METHOD /usr/share/rvm/gems/ruby-2.5.0/gems/listen-3.1.5/lib/listen/record.rb:100
c:0008 p:0070 s:0034 e:000033 METHOD /usr/share/rvm/gems/ruby-2.5.0/gems/listen-3.1.5/lib/listen/record.rb:68
c:0007 p:0009 s:0028 e:000027 BLOCK  /usr/share/rvm/gems/ruby-2.5.0/gems/listen-3.1.5/lib/listen/adapter/base.rb:76
c:0006 p:0017 s:0025 e:000024 METHOD /usr/share/rvm/gems/ruby-2.5.0/gems/listen-3.1.5/lib/listen/adapter/base.rb:103
c:0005 p:0008 s:0018 e:000017 BLOCK  /usr/share/rvm/gems/ruby-2.5.0/gems/listen-3.1.5/lib/listen/adapter/base.rb:76 [FINISH]
c:0004 p:---- s:0014 e:000013 CFUNC  :each
c:0003 p:0011 s:0010 e:000009 BLOCK  /usr/share/rvm/gems/ruby-2.5.0/gems/listen-3.1.5/lib/listen/adapter/base.rb:75 [FINISH]
c:0002 p:0007 s:0006 e:000005 BLOCK  /usr/share/rvm/gems/ruby-2.5.0/gems/listen-3.1.5/lib/listen/internals/thread_pool.rb:6 [FINISH]
c:0001 p:---- s:0003 e:000002 (none) [FINISH]

-- Ruby level backtrace information ----------------------------------------
/usr/share/rvm/gems/ruby-2.5.0/gems/listen-3.1.5/lib/listen/internals/thread_pool.rb:6:in `block in add'
/usr/share/rvm/gems/ruby-2.5.0/gems/listen-3.1.5/lib/listen/adapter/base.rb:75:in `block in start'
/usr/share/rvm/gems/ruby-2.5.0/gems/listen-3.1.5/lib/listen/adapter/base.rb:75:in `each'
/usr/share/rvm/gems/ruby-2.5.0/gems/listen-3.1.5/lib/listen/adapter/base.rb:76:in `block (2 levels) in start'
/usr/share/rvm/gems/ruby-2.5.0/gems/listen-3.1.5/lib/listen/adapter/base.rb:103:in `_timed'
/usr/share/rvm/gems/ruby-2.5.0/gems/listen-3.1.5/lib/listen/adapter/base.rb:76:in `block (3 levels) in start'
/usr/share/rvm/gems/ruby-2.5.0/gems/listen-3.1.5/lib/listen/record.rb:67:in `build'
/usr/share/rvm/gems/ruby-2.5.0/gems/listen-3.1.5/lib/listen/record.rb:102:in `_fast_build_dir'
/usr/share/rvm/gems/ruby-2.5.0/gems/listen-3.1.5/lib/listen/record/entry.rb:18:in `children'

-- Machine register context ------------------------------------------------
 RIP: 0x00007f03df83e140 RBP: 0x000055e2c1faa3e8 RSP: 0x00007ffcb2ab4718
 RAX: 0x0000000000000000 RBX: 0x00007f03df8412c0 RCX: 0x0000000000000000
 RDX: 0x000055e2bc30f010 RDI: 0x000055e2c1faa6c0 RSI: 0x000055e2c260c540
  R8: 0x0000000000000000  R9: 0x0000000000000000 R10: 0x00007f03dff62630
 R11: 0x00007f03e0076890 R12: 0x000055e2c1faa3e0 R13: 0x00007f03dfd83b10
 R14: 0x0000000000000000 R15: 0x000055e2c2670fd0 EFL: 0x0000000000010202

-- C level backtrace information -------------------------------------------
Unexpected size of .debug_line in /usr/share/rvm/rubies/ruby-2.5.0/bin/ruby
/usr/share/rvm/rubies/ruby-2.5.0/lib/libruby.so.2.5(rb_vm_bugreport+0x4ae) [0x7f03e16b18ce]
/usr/share/rvm/rubies/ruby-2.5.0/lib/libruby.so.2.5(0xaafbd) [0x7f03e152ffbd]
/usr/share/rvm/rubies/ruby-2.5.0/lib/libruby.so.2.5(0x19e2e6) [0x7f03e16232e6]
/lib/x86_64-linux-gnu/libc.so.6(0x7f03e128e520) [0x7f03e128e520]
/lib/x86_64-linux-gnu/libssl.so.3(0x7f03df83e140) [0x7f03df83e140]
Run Code Online (Sandbox Code Playgroud)

根据这篇文章,在此处输入链接描述, pg gem 的这个问题也与 openssl 版本有关

因此,这两个问题都与 ubuntu 22.04 附带的 OpenSSL 版本相关,但我找不到任何指南来解释如何逐步修复它或如何使用旧版 OpenSSL 版本进行 ruby​​ 安装,而不会出现所有这些错误。

那么在 Ubuntu 22.04 上安装 ruby​​ 的正确步骤是什么呢?

小智 8

对我有用的是跑步

rvm pkg install openssl

进而

rvm install ruby-2.7.3 --with-openssl-dir=$HOME/.rvm/usr

希望能帮助到你!

  • 警告:即使 Ruby 使用它进行编译,有些 gem 也无法工作!特别是 MySQL gem,它使用 OpenSSL 3 进行编译,并且二进制文件与 RVM 自己的 OpenSSL 1.0 不兼容 (2认同)

Cod*_*ror 7

大多数从 Google 来到这里的人可能会运行以下命令:

rvm install ruby
Run Code Online (Sandbox Code Playgroud)

截至撰写本文时,这将安装 ruby 3.0.0​​,这将在 Ubuntu 22.04 上给您带来构建错误。

大多数人可能想要安装最新版本3.1.0,但运行时不会显示rvm list known

要安装最新版本(当前3.1.0),请运行:

rvm install ruby-3.1.0
Run Code Online (Sandbox Code Playgroud)

最新版本可以在 Ubuntu 22.04 上正常安装。

  • 谢谢rvm的具体解答! (2认同)

Max*_*Max 4

在遵循了您的大部分操作之后,我正在考虑降级整个系统。幸运的是,我找到了这篇文章

https://deanpcmad.com/2022/installing-older-ruby-versions-on-ubuntu-22-04/

并决定再给它最后一次机会。作者正在使用名为 的工具asdf,但有一个注释,相同的配置应该适用于 rbenv。我运行rvm implode,安装了 rbenv,安装了 gems 并启动了 Rails 服务器。

它成功了!不确定 rvm 有什么问题,枯萎是它的错误或 OpenSSL 不匹配,但目前我想专注于编码,仅此而已。

希望这能帮助人们进行进一步的研究。