簡體   English   中英

在 ubuntu 22.04 上安裝 ruby 的正確方法是什么

[英]What is the correct way to install ruby on ubuntu 22.04

使用 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.

如果我嘗試安裝 ruby 2.7.0、2.7.1,也會出現同樣的錯誤。 2.7.2 及更高版本。

我在這里找到了使用以下步驟的建議

rvm pkg 安裝 openssl

rvm 刪除 xxx

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

這使得安裝成功,但是一些庫如 pg 或 rails 或 puma 不適用於以這種方式安裝的 ruby 版本。 例如,在 bundle install 之后,如果你運行命令 'rails db:migrate',它會給你另一個來自 pg gem 的錯誤 - Segmentation fault

/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]

根據這篇文章enter link description here這個關於pg gem的問題也被發布到openssl版本

因此,這兩個問題都與 ubuntu 22.04 附帶的 OpenSSL 版本有關,但我找不到任何指南來逐步解釋如何修復它或如何使用舊的 OpenSSL 版本進行 ruby 安裝,而不會出現所有這些錯誤.

那么在 Ubuntu 22.04 上安裝 ruby 的正確步驟是什么?

大多數從谷歌來到這里的人可能正在運行以下內容:

rvm install ruby

在撰寫本文時,這將安裝 ruby 3.0.0 ,這將在 Ubuntu 22.04 上給你一個構建錯誤。

大多數人可能想安裝最新的3.1.0 ,這在運行rvm list known

要安裝最新的(目前是3.1.0 )運行:

rvm install ruby-3.1.0

最新版本將在 Ubuntu 22.04 上正常安裝。

不過,在遵循了您的大部分操作之后,我正考慮降級整個系統。 幸運的是,我找到了這篇文章

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

並決定給它最后一次機會。 作者正在使用名為asdf的工具,但有一個注釋,相同的配置應該適用於 rbenv。 我運行rvm implode ,安裝 rbenv,安裝 gems 並啟動 rails 服務器。

它奏效了! 不確定 rvm 有什么問題,是它的錯還是 OpenSSL 不匹配,但目前我想專注於編碼,僅此而已。

希望這將有助於有人進行進一步的研究。

我遇到了同樣的問題,最好的解決方案是使用rbenv而不是rvm 您不需要降級 Ubuntu 22.04 的 openssl 版本,因為 rbenv 已經為您的 ruby​​ 版本下載並使用了 openssl 1.1.1。

使用 ruby​​-build 作為插件安裝 rbenv https://github.com/rbenv/rbenv https://github.com/rbenv/ruby-build

我的版本(Openssl、Ruby 和 Rbenv) 在此處輸入圖像描述

對我有用的是跑步

rvm pkg install openssl

接着

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

希望能幫助到你!

我找到了解決這個問題的方法。 要修復它,您需要安裝 libssl1.0-dev 並刪除當前版本的 libssl-dev。 因此,如果您需要安裝 ruby 2.7.1,則必須執行這兩個命令

 sudo apt purge libssl-dev && sudo apt install libssl1.0-dev
 rvm install 2.7.1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM