![](/img/trans.png)
[英]Every time I try to install Ruby 3.1.2 via Ubuntu for WSL, my computer crashes
[英]How to install ruby 3.1.2 in an Ubuntu Docker container?
我試過:
if ! command -v ruby &> /dev/null
then
# - proverbot's version
# First, install Ruby, as that is for some reason required to build
# the "system" project
# git clone https://github.com/rbenv/ruby-build.git ~/ruby-build
# mkdir -p ~/.local
# PREFIX=~/.local ./ruby-build/install.sh
# ~/.local/ruby-build 3.1.2 ~/.local/
# - u-pycoq's version
# sudo apt-get install ruby-full
sudo apt-get install rbenv
rbenv init
eval "$(rbenv init - bash)"
echo 'eval "$(rbenv init - bash)"' >> ~/.bashrc
sudo apt-get install ruby-build
# ruby-build 3.1.2
rbenv install 3.1.2
rbenv global 3.1.2
ruby -v
else
echo "Error: failed to install ruby"
fi
但是我得到我的 Ruby 構建可能不是最新的,但是當我安裝它時,它是最新的。 因此,如果proverbot的嘗試不存在,為什么是3.1.2呢?
它的靈感來自: https ://superuser.com/questions/340490/how-to-install-and-use-different-versions-of-ruby
它似乎適用於 2.7.1,但不適用於 3.1.2。
sudo apt-get install rbenv
rbenv init
eval "$(rbenv init - bash)"
echo 'eval "$(rbenv init - bash)"' >> ~/.bashrc
sudo apt-get install ruby-build
# mkdir -p ~/.local
# PREFIX=~/.local
# sh ~/ruby-build/install.sh
mkdir -p ~/.local
ruby-build 2.7.1 ~/.local
rbenv global 2.7.1
# ruby-build 2.3.1p112 ~/.local/
# ruby-build 3.1.2 ~/.local/
# rbenv global 3.1.2
ruby -v
bot@513314bdda2a:~/ruby-build$ ruby -v
ruby 2.7.4p191 (2021-07-07 revision a21a3b7d23) [aarch64-linux-gnu]
我認為這是安裝 rbenv 和 ruby-build 后失敗的主要命令:
rbenv install 3.1.2
和
ruby-build: definition not found: 3.1.2
See all available versions with `rbenv install --list.
If the version you need is missing, try upgrading ruby-build.
我在我的 Docker 容器外的另一個服務器上嘗試了它,Ruby 可以工作。 在 Docker 容器中,它說它是:
bot@513314bdda2a:~/ruby-build$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 11 (bullseye)
Release: 11
Codename: bullseye
這是一個問題嗎?
我跑了sudo apt-get update
然后sudo apt-get upgrade ruby-build
-build 然后mkdir -p ~/.local
然后ruby-build 3.1.2 ~/.local/
錯誤是ruby-build: definition not found: 3.1.2
#!/usr/bin/env bash
# - Get the Ubuntu version for the Ubuntu image
#docker run -it --rm ubuntu:20.04 /bin/bash
docker run -it --rm ubuntu:18.04 /bin/bash
apt-get update && apt-get install -y lsb-release && apt-get clean all
lsb_release -a
#apt-get install git
apt-get update
apt-get upgrade ruby-build
apt-get install rbenv
apt-get install ruby-build
rbenv install 3.1.2
# - Get Ubuntu version for the 'miniconda3' Docker image
docker run -it --rm continuumio/miniconda3:latest /bin/bash
#sudo apt-get install lsb-release
#apt-get install lsb-release
apt-get update && apt-get install -y lsb-release && apt-get clean all
lsb_release -a
ruby-build 的輸出https://gist.github.com/brando90/8a40e83df107f5a915ba105d9fb0121c
$ ruby-build --definitions
1.8.5-p52
1.8.5-p113
...
要點是所有 3.xx 都丟失了。
我確實做了:
git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build
然后
git -C "$(rbenv root)"/plugins/ruby-build pull
然后我用 rbenv 安裝了 3.1.2。 它似乎成功了,但是ruby --version
似乎不正確(?)。
bot@e3a50e4f740f:~$ rbenv install 3.1.2
To follow progress, use 'tail -f /tmp/ruby-build.20221207002433.1304.log' or pass --verbose
Downloading ruby-3.1.2.tar.gz...
-> https://cache.ruby-lang.org/pub/ruby/3.1/ruby-3.1.2.tar.gz
Installing ruby-3.1.2...
Installed ruby-3.1.2 to /home/bot/.rbenv/versions/3.1.2
bot@e3a50e4f740f:~$ ruby --version
ruby 2.7.4p191 (2021-07-07 revision a21a3b7d23) [aarch64-linux-gnu]
bot@e3a50e4f740f:~$ rbenv global 3.1.2
bot@e3a50e4f740f:~$ ruby --version
ruby 2.7.4p191 (2021-07-07 revision a21a3b7d23) [aarch64-linux-gnu]
唉,沒用:皺眉:
$ rbenv install 3.1.2
rbenv: no such command `install'
我做了:
mkdir ~/.rbenv
cd ~/.rbenv
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
echo 'eval "$(~/.rbenv/bin/rbenv init - bash)"' >> ~/.bashrc
bash
# exec $SHELL
rbenv install 3.1.2
使用官方說明: Seamlessly manage your app's Ruby environment with rbenv, Basic Git Checkout
我嘗試在具有特定版本 3.1.2 的 Docker 容器上安裝 ruby 的所有選項,可能最好只使用 Ruby 映像,對 3.1.2 有什么建議嗎?
我仍然無法在已經運行的容器上安裝 Ruby :(, 是否可以在正在運行的圖像之上將 ruby 3.1.2 圖像分層到正在運行的容器中?
參考:
這不適用於問題標題的 Ubuntu Docker 容器,但它至少適用於我使用的 Ubuntu 的HPC ,因此它對未來的讀者仍然有用,這是 Ubuntu Docker 容器的真正答案仍然需要和想要。
# - install rbenv for installing the Ruby interpreter
mkdir ~/.rbenv
cd ~/.rbenv
git clone https://github.com/rbenv/rbenv.git .
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc.user
echo 'eval "$(rbenv init -)"' >> ~/.bashrc.user
exec $SHELL
bash
source ~/.bashrc.user
rbenv -v
# - install ruby-build
mkdir ~/.ruby-build
cd ~/.ruby-build
git clone https://github.com/rbenv/ruby-build.git .
export PATH="$HOME/.ruby-build/bin:$PATH"
echo 'export PATH="$HOME/.ruby-build/bin:$PATH"' >> ~/.bashrc.user
exec $SHELL
bash
source ~/.bashrc.user
ruby-build --version
# - install ruby without sudo -- now that ruby build was install
mkdir -p ~/.local
# ruby-build 3.1.2 ~/.local/
rbenv install 3.1.2
rbenv global 3.1.2
ruby -v
which ruby
鑒於我迄今為止付出的巨大努力,我認為最好的辦法就是從頭開始重建 Docker 鏡像,從您需要的所有 Docker 鏡像開始。 對我來說,我需要從這些開始:
FROM continuumio/miniconda3
# FROM --platform=linux/amd64 continuumio/miniconda3
#FROM ubuntu:20.04
#FROM ubuntu:18.04
FROM ruby:3.1.2
但是重建圖像,我測試了在啟動 Ruby 3.1.2 容器后是否可以使用正確的 Ruby 圖像(如果你想要一個不同的圖像,我假設去 Docker 網站尋找 Ruby works 或嘗試不同的版本標簽或者做最新的)。 輸出:
(meta_learning) brandomiranda~ ❯ docker run -it --rm ruby:3.1.2 bash
Unable to find image 'ruby:3.1.2' locally
3.1.2: Pulling from library/ruby
077c13527d40: Pull complete
a3e29af4daf3: Pull complete
3d7b1480fa4d: Pull complete
426e8acfed2a: Pull complete
7301bf329e1e: Pull complete
1e6ce022773b: Pull complete
08fd3b7f7d99: Pull complete
2a797222ff77: Pull complete
Digest: sha256:7681a3d37560dbe8ff7d0a38f3ce35971595426f0fe2f5709352d7f7a5679255
Status: Downloaded newer image for ruby:3.1.2
root@70d03f6408cd:/# ruby --version
ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [aarch64-linux]
您可以使用rvm
而不是rbenv
。
網站: https ://rvm.io。 它適用於碼頭工人。
這是 ubuntu docker 鏡像的命令
curl -sSL https://get.rvm.io | bash -s stable
rvm install 3.1.2
ruby -v // 3.1.2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.