我最近将我的系统更新为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
安装它有什么作用?或者不可能再安装这些旧版本了?
答案 0 :(得分:35)
我有同样的问题,虽然问题出现在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
后,一切都完美无瑕。
答案 1 :(得分:5)
通过更新rvm解决了这个问题
rvm get head
答案 2 :(得分:3)
还可以使用RVM:
1. sudo apt purge libssl-dev && sudo apt install libssl1.0-dev
2. rvm install 2.3.5 --autolibs=disable
您必须手动安装RVM依赖项,否则,在启用autolibs的情况下,RVM将尝试更新系统依赖项以及libssl-dev(您在第一步中降级)。如果您不想手动安装依赖项,可以尝试安装启用了autolibs的Ruby,安装将失败,此时您已安装依赖项,因此您可以降级libssl,重复步骤1中的所有内容。
答案 3 :(得分:1)
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
为我工作
答案 4 :(得分:1)
为了在Ubuntu 20.04上安装libssl-dev。使用此命令可以做到这一点。它为我工作:
sudo apt install libssl-dev/focal
答案 5 :(得分:0)
我有类似的问题。显然是ruby版本< 2.3与openssl 1.1不兼容,它带有最新版本的Ubuntu。在这里我找到了ArchLinux的解决方案,我尝试了这个解决方案并且ruby编译得很好,但我在rails中有很多内存错误,那么我现在的独特解决方案是使用ruby> 2.4直到我找到其他解决方案。
答案 6 :(得分:-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