在Ubuntu 18.04上安装Ruby 2.3.x会在安装过程结束时导致错误

gam*_*ofe 10 ruby ruby-2.3 ubuntu-18.04

我最近将我的系统更新到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
Run Code Online (Sandbox Code Playgroud)

日志文件也有一个愚蠢的巨型日志文件.

下一次尝试是从源安装,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
Run Code Online (Sandbox Code Playgroud)

安装它有什么作用?或者不可能再安装这些旧版本?

gui*_*man 40

我有同样的问题,虽然看起来有问题,但gcc在我的情况下问题出现了libssl-dev,这对我有什么帮助:

sudo apt purge libssl-dev && sudo apt install libssl1.0-dev
Run Code Online (Sandbox Code Playgroud)

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

/usr/share/rvm/scripts/base: No such file or directory
Run Code Online (Sandbox Code Playgroud)

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

  • rbenv 2.3.1和2.2.5安装成功,谢谢! (3认同)
  • 还有一件事需要提及.我想当你想在以后安装更新版本的ruby时,你会发现一个chane,你将会缺少`libssl-dev`(原版) (2认同)

Ste*_*fan 10

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

Run Code Online (Sandbox Code Playgroud)

为我工作


Sam*_*tti 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,安装将失败,此时您已经安装了依赖项,因此您可以从步骤 1 开始重复所有操作来降级 libssl。


lac*_*der -1

用rvm试试这个

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

或者尝试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
Run Code Online (Sandbox Code Playgroud)