如何使用 rbenv 在 Ubuntu 21.1 上安装 Ruby 2.3.0?

Posted

技术标签:

【中文标题】如何使用 rbenv 在 Ubuntu 21.1 上安装 Ruby 2.3.0?【英文标题】:How do I install Ruby 2.3.0 on Ubuntu 21.1 using rbenv? 【发布时间】:2022-01-17 07:31:11 【问题描述】:

我正在开发一个使用 Ruby 2.3.0(使用 Rails)编写的应用程序,我的操作系统是 Linux Ubuntu 21.1。 (希望升级项目的 Ruby 版本,但也遇到了麻烦)

为了让应用程序正常运行,我的第一个想法是使用 rbenv 安装 2.3.0,但经过多次故障排除后,我仍然收到以下错误:

~$ rbenv install 2.3.0
-> https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.0.tar.bz2
Installing ruby-2.3.0...

WARNING: ruby-2.3.0 is past its end of life and is now unsupported.
It no longer receives bug fixes or critical security updates.


BUILD FAILED (Ubuntu 21.10 using ruby-build 20211203)

Inspect or clean up the working tree at /tmp/ruby-build.20211214112011.528089.XXe70o
Results logged to /tmp/ruby-build.20211214112011.528089.log

Last 10 log lines:
linking shared-object nkf.so
make[2]: Leaving directory '/tmp/ruby-build.20211214112011.528089.XXe70o/ruby-2.3.0/ext/nkf'
linking shared-object bigdecimal.so
make[2]: Leaving directory '/tmp/ruby-build.20211214112011.528089.XXe70o/ruby-2.3.0/ext/bigdecimal'
linking shared-object date_core.so
make[2]: Leaving directory '/tmp/ruby-build.20211214112011.528089.XXe70o/ruby-2.3.0/ext/date'
linking shared-object ripper.so
make[2]: Leaving directory '/tmp/ruby-build.20211214112011.528089.XXe70o/ruby-2.3.0/ext/ripper'
make[1]: Leaving directory '/tmp/ruby-build.20211214112011.528089.XXe70o/ruby-2.3.0'

错误日志文件:

error log file

我尝试使用以下方法安装 openssl 1.0:

 ~$ brew install rbenv/tap/openssl@1.0

 x86_64cpuid.s: Assembler messages: x86_64cpuid.s:2: Error: unknown
 pseudo-op: `.private_extern' x86_64cpuid.s:3: Error: unknown
 pseudo-op: `.mod_init_func' x86_64cpuid.s:7: Error: unknown pseudo-op:
 `.private_extern' make[1]: *** [<builtin>: x86_64cpuid.o] Error 1
 make[1]: Leaving directory
 '/tmp/opensslA1.0-20211213-493929-qg8eui/openssl-1.0.2t/crypto' make:
 *** [Makefile:287: build_crypto] Error 1
   
 If reporting this issue please do so at (not Homebrew/brew or
 Homebrew/core):   https://github.com/rbenv/homebrew-tap/issues 
 These open issues may also help: `brew install rbenv/tap/openssl@1.0` not working anymore https://github.com/rbenv/homebrew-tap/issues/1

我点击了错误消息中的链接,并尝试了那里的建议:

~$ brew tap rbenv/tap

~$ brew install rbenv/tap/openssl@1.0

x86_64cpuid.s: Assembler messages:
x86_64cpuid.s:2: Error: unknown pseudo-op: `.private_extern'
x86_64cpuid.s:3: Error: unknown pseudo-op: `.mod_init_func'
x86_64cpuid.s:7: Error: unknown pseudo-op: `.private_extern'
make[1]: *** [<builtin>: x86_64cpuid.o] Error 1
make[1]: Leaving directory '/tmp/opensslA1.0-20211213-498635-w2ky1d/openssl-1.0.2t/crypto'
make: *** [Makefile:287: build_crypto] Error 1

If reporting this issue please do so at (not Homebrew/brew or Homebrew/core):
  https://github.com/rbenv/homebrew-tap/issues

These open issues may also help:
`brew install rbenv/tap/openssl@1.0` not working anymore https://github.com/rbenv/homebrew-tap/issues/1

我还尝试升级应用程序的 ruby​​ 版本,并继续遇到错误 - 例如过时的依赖项。我是 ruby​​ 和 rails 的新手,还在学习!

这是我的第一篇文章,所以如果它不是很好或我错过了一些细节,请道歉。我很乐意提供所需的任何进一步信息。

非常感谢您的帮助。

【问题讨论】:

`/tmp/ruby-build.20211213145338.469895.log`的内容是什么?构建失败的真正原因就在那里。请编辑您的帖子以添加该文件的内容。 另外,我不太确定使用 sudo 运行 rbenv 是否是个好主意。特别是如果进行故障排除,我会坚持非 sudo 工作,直到您编译为止。 谢谢@Casper,我现在正在更新帖子!我将删除 sudo,好电话。 @Casper - 我将错误日志更新为最新结果,再次感谢! 使用 Ubuntu 20.04 会更好。我找不到 21.10 的 OpenSSL 1.0。所以这是你现在的实际问题;在 Ubuntu 21.10 上构建 OpenSSL 1.0。您也可以尝试使用 RVM 构建 2.3.0 Ruby,看看它是否能够做到。抱歉,我帮不上什么忙。即使只是 Ubuntu 20 也有 libssl 1.0,但 21 没有。这是你的问题。您也可以尝试在 rbenv github repo 上打开一个问题。如果您找到解决方案,请在此处报告。 【参考方案1】:

感谢@Casper 的帮助,我解决了这个问题。

对于 Ubuntu 的最新版本,由于 OpenSSL 依赖项不匹配,rbenv 无法安装低于 2.4 的 Ruby。

使用安装在另一台计算机上的 Ubuntu 16.04 版本为我解决了这个问题。

【讨论】:

以上是关于如何使用 rbenv 在 Ubuntu 21.1 上安装 Ruby 2.3.0?的主要内容,如果未能解决你的问题,请参考以下文章

sh 在Ubuntu 14.04上使用rbenv和ruby-build安装ruby 2.2.3

sh rbenv在Ubuntu 14.04 LTS上安装ruby 2.3.0

缺少命令 rbenv install

如何使用 rbenv 和 cron 运行 Ruby 脚本

如何在 macOS 上卸载 rbenv?

RVM 和 rbenv 是如何工作的?