NotFound
千里之行始于足下
Linux 编译安装 Ruby

Linux 编译安装 Ruby

  • Ubuntu 20.04
  • Ruby 3.0.0

直接编译安装

wget http://cache.ruby-china.com/pub/ruby/3.0/ruby-3.0.0.tar.gz
tar -zxvf ruby-3.0.0.tar.gz
cd ruby-3.0.0
./configure --prefix=/opt/ruby-3.0.0
make -j8
make install

集成 jemalloc

jemalloc 可以大幅度减少 sidekiq 内存碎片。

sudo apt install libjemalloc-dev

编译方式

编译时添加 --with-jemalloc 参数即可:

./configure --prefix=/opt/ruby-3.0.0 --with-jemalloc

检查 jemalloc:

/opt/ruby-3.0.0/bin/ruby -r rbconfig -e "puts RbConfig::CONFIG['MAINLIBS']"
# 低版本
# ruby -r rbconfig -e "puts RbConfig::CONFIG['LIBS']"

输出:

-lz -lpthread - lrt -lrt -ljemalloc -lgmp -ldl -lcrypt -lm

环境变量方式

设置环境变量 LD_PRELOAD 即可

export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so

指定 openssl 版本

编译 openssl:

wget https://www.openssl.org/source/openssl-1.1.1j.tar.gz
tar -zxvf openssl-1.1.1j.tar.gz
cd openssl-1.1.1j
./config shared --prefix=/opt/openssl-1.1.1j
make -j8

通过 --with-openssl-dir 参数指定 openssl 路径:

./configure --prefix=/opt/ruby-3.0.0 --with-openssl-dir=/opt/openssl-1.1.1j

可能遇到问题

$ gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
Error fetching https://gems.ruby-china.com/:
SSL_connect returned=1 errno=0 state=error: certificate verify failed (https://gems.ruby-china.com/specs.4.8.gz)

导入环境变量即可:

export SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt
export SSL_CERT_DIR=/etc/ssl/certs

环境变量

输出 gem 信息:

gem env
gem env path
gem env home

通过设置 GEM_PATH 修改 gem 查找路径:

export GEM_PATH=/home/notfound/app/vendor/bundle/ruby/2.7.0

参考


Last modified on 2021-03-20