21

我最近将我的系统更新到了 Ubuntu 18.04 LTS,从那时起,Ruby 版本似乎已经更新到了 2.5。问题是,当尝试部署使用 Capistrano 的项目时,它现在会抱怨找不到 Ruby 2.3。

它在运行时尝试安装的版本rvm install 2.3是 2.3.4,显示的第一个错误是“ Error running '__rvm_make -j4'”。我尝试删除 RVM 并再次安装,但没有解决这个问题。日志是一个巨大的文件,它什么也没告诉我。

然后,我尝试使用rbenv,这也会导致错误:

Installing ruby-2.3.4...

BUILD FAILED (Ubuntu 18.04 using ruby-build 20180424)

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

Last 10 log lines:
installing default nkf libraries
linking shared-object objspace.so
make[2]: Leaving directory '/tmp/ruby-build.20180429172721.16258/ruby-2.3.4/ext/objspace'
linking shared-object pathname.so
make[2]: Leaving directory '/tmp/ruby-build.20180429172721.16258/ruby-2.3.4/ext/pathname'
linking shared-object nkf.so
make[2]: Leaving directory '/tmp/ruby-build.20180429172721.16258/ruby-2.3.4/ext/nkf'
make[1]: Leaving directory '/tmp/ruby-build.20180429172721.16258/ruby-2.3.4'
uncommon.mk:203: recipe for target 'build-ext' failed
make: *** [build-ext] Error 2

日志文件还有一个愚蠢的巨型日志文件。

下一次尝试是从源代码安装,make在文件夹中运行后,错误:

openssl_missing.h:78:35: error: macro "EVP_MD_CTX_create" passed 1 arguments, but takes just 0
 EVP_MD_CTX *EVP_MD_CTX_create(void);
                                   ^
In file included from /usr/include/openssl/x509.h:23:0,
                 from /usr/include/openssl/x509_vfy.h:17,
                 from openssl_missing.c:15:
openssl_missing.h:82:6: error: expected declaration specifiers or ‘...’ before ‘(’ token
 void EVP_MD_CTX_init(EVP_MD_CTX *ctx);
      ^
openssl_missing.h:90:6: error: expected declaration specifiers or ‘...’ before ‘(’ token
 void EVP_MD_CTX_destroy(EVP_MD_CTX *ctx);
      ^
openssl_missing.c:39:23: error: macro "EVP_MD_CTX_create" passed 1 arguments, but takes just 0
 EVP_MD_CTX_create(void)
                       ^
openssl_missing.c:40:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
 {
 ^
openssl_missing.c: In function ‘EVP_MD_CTX_cleanup’:
openssl_missing.c:55:27: error: invalid application of ‘sizeof’ to incomplete type ‘EVP_MD_CTX {aka struct evp_md_ctx_st}’
     memset(ctx, 0, sizeof(EVP_MD_CTX));
                           ^~~~~~~~~~
In file included from /usr/include/openssl/x509.h:23:0,
                 from /usr/include/openssl/x509_vfy.h:17,
                 from openssl_missing.c:15:
openssl_missing.c: At top level:
openssl_missing.c:63:1: error: expected declaration specifiers or ‘...’ before ‘(’ token
 EVP_MD_CTX_destroy(EVP_MD_CTX *ctx)
 ^
openssl_missing.c:72:1: error: expected declaration specifiers or ‘...’ before ‘(’ token
 EVP_MD_CTX_init(EVP_MD_CTX *ctx)
 ^
openssl_missing.c: In function ‘HMAC_CTX_init’:
openssl_missing.c:82:25: error: dereferencing pointer to incomplete type ‘HMAC_CTX {aka struct hmac_ctx_st}’
     EVP_MD_CTX_init(&ctx->i_ctx);
                         ^
openssl_missing.c: In function ‘HMAC_CTX_cleanup’:
openssl_missing.c:95:27: error: invalid application of ‘sizeof’ to incomplete type ‘HMAC_CTX {aka struct hmac_ctx_st}’
     memset(ctx, 0, sizeof(HMAC_CTX));
                           ^~~~~~~~
Makefile:301: recipe for target 'openssl_missing.o' failed
make[2]: *** [openssl_missing.o] Error 1
make[2]: Leaving directory '/home/gabriel/Downloads/ruby-2.3.7/ext/openssl'
exts.mk:212: recipe for target 'ext/openssl/all' failed
make[1]: *** [ext/openssl/all] Error 2
make[1]: Leaving directory '/home/gabriel/Downloads/ruby-2.3.7'
uncommon.mk:203: recipe for target 'build-ext' failed
make: *** [build-ext] Error 2

安装它需要做什么?还是无法再安装这些旧版本?

4

8 回答 8

51

我遇到了同样的问题,虽然问题似乎在gcc,在我的情况下,问题在libssl-dev,这对我有帮助:

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

我用rbenv. 如果使用rvm,则在运行上一个命令后可能会遇到问题:

/usr/share/rvm/scripts/base: No such file or directory

我建议尝试rbenv。安装后libssl1.0-dev,一切都完美无缺。

于 2018-05-02T15:13:31.530 回答
12
cd ~/src
 wget https://www.openssl.org/source/openssl-1.0.2s.tar.gz
 tar xvzf openssl-1.0.2s.tar.gz
 cd openssl-1.0.2s
 mkdir ~/.rubies/openssl-1.0.2s
 ./config --prefix=$HOME/.rubies/openssl-1.0.2s --shared
 make
 make install
 RUBY_CONFIGURE_OPTS=--with-openssl-dir=$HOME/.rubies/openssl-1.0.2s rbenv install 2.3.1

为我工作

于 2019-08-31T18:36:27.080 回答
6

让它也适用于 RVM:

1. sudo apt purge libssl-dev && sudo apt install libssl1.0-dev 2. rvm install 2.3.5 --autolibs=disable

您必须手动安装 RVM 依赖项,否则,启用自动库后,RVM 将尝试更新系统依赖项以及 libssl-dev(您在第一步中降级)。如果您不想手动安装依赖项,可以尝试在启用 autolibs 的情况下安装 Ruby,安装将失败,此时您已安装依赖项,因此您可以降级 libssl,从步骤 1 开始重复所有操作。

于 2018-05-21T12:36:22.933 回答
4

通过更新 rvm 解决了这个问题 rvm get head

于 2018-05-14T21:46:48.550 回答
1

为了在 Ubuntu 20.04 上安装 libssl-dev。使用此命令来执行此操作。它对我有用: sudo apt install libssl-dev/focal

于 2020-07-11T13:52:21.990 回答
0

我有一个类似的问题。显然,ruby 版本 < 2.3 与最新版本的 Ubuntu 附带的 openssl 1.1 不兼容。在这里我找到了ArchLinux的解决方案,我尝试了这个解决方案并且 ruby​​ 编译得很好,但是我在 rails 中有很多内存错误,然后我现在唯一的解决方案是使用 ruby​​ > 2.4,直到我找到其他解决方案。

于 2018-05-01T14:11:23.940 回答
0

OpenSSL 1.1 与 Ruby 2.3.x 不兼容,请在此处查看此问题

我使用以下命令解决了 mac 上的问题。

rvm reinstall ruby-2.3.8 --with-openssl-dir=`brew --prefix openssl@1.0` --debug

您可以通过安装以类似的方式为 ubuntu 解决它openssl@1.0

于 2022-01-26T10:51:20.460 回答
-1

用 rvm 试试这个

rvm install ruby-2.3.4

或者试试https://gorails.com/setup/ubuntu/18.04

您可能缺少必需的库,因此请先尝试运行这些库:

curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list

sudo apt-get update
sudo apt-get install git-core curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev python-software-properties libffi-dev nodejs yarn
于 2018-04-29T10:25:19.917 回答