You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何仅rbenv+ruby-build可在无权限Ubuntu集群安装Ruby?

在无管理员权限的Ubuntu集群中安装Ruby 3.1.2的问题解析

问题背景

我在无管理员权限的Ubuntu集群中尝试常规方法安装Ruby均失败,仅通过以下结合rbenv和ruby-build的脚本成功安装了Ruby 3.1.2:

#!/usr/bin/env bash
# -- this really is the only solution that worked for me on snap :/

ruby -v
if ! command -v ruby &> /dev/null
then
    echo "Going to try to install ruby (ideally 3.1.2)"
    # - install rbenv (following ruby-build really is needed eventhough it doesn't look like it)
    mkdir -p ~/.rbenv
    cd ~/.rbenv
    git clone https://github.com/rbenv/rbenv.git .
    # if $HOME/.rbenv/bin not in path append it, otherwise don't change it
    echo $PATH | tr ':' '
' | awk '{print "  " $0}';
    if [[ ":$PATH:" != *":$HOME/.rbenv/bin:"* ]]; then
      echo "might want to put $HOME/.rbenv/bin in your path"
      export PATH="$HOME/.rbenv/bin:$PATH"
#      echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc.lfs
    fi
    eval "$(rbenv init -)"
    rbenv -v

    # - install ruby-build, odd, this really is needed for ruby to install despite it not looking like ruby build is need at the bottom
    mkdir -p ~/.ruby-build
    cd ~/.ruby-build
    git clone https://github.com/rbenv/ruby-build.git .
    # if $HOME/.ruby-build/bin not in path append it, otherwise don't change it
    echo $PATH | tr ':' '
' | awk '{print "  " $0}';
    if [[ $PATH != *"$HOME/.ruby-build/bin"* ]]; then
      echo "might want to put $HOME/.ruby-build/bin in your path"
      export PATH="$HOME/.ruby-build/bin:$PATH"
#      echo 'export PATH="$HOME/.ruby-build/bin:$PATH"' >> ~/.bashrc.lfs
    fi
    ruby-build --version

    # - install ruby without sudo -- using rbenv
    mkdir -p ~/.local
    #    ruby-build 3.1.2 ~/.local/
    rbenv install 3.1.2
    rbenv global 3.1.2
fi
ruby -v

# - Original Prover doesn't work on SNAP
# Proverbot's way to install ruby
#    # 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/
# ref: https://superuser.com/questions/340490/how-to-install-and-use-different-versions-of-ruby/1756372#1756372

为什么常规方法失败,而rbenv+ruby-build可行?

  • 常规系统级安装工具(如apt)需要管理员权限,无sudo权限无法执行;且Ubuntu默认仓库中的Ruby版本通常不是目标的3.1.2版本。
  • 直接源码编译Ruby需要手动处理编译依赖、配置安装路径(必须指向用户可读写目录,如~/.local),过程繁琐,容易因依赖缺失、路径配置错误导致失败。
  • rbenv是用户级Ruby版本管理器,所有操作均在用户主目录内完成,无需管理员权限;ruby-build作为rbenv的核心插件,会自动处理Ruby源码的下载、编译、安装全流程,帮你规避手动编译的各种细节问题,比如依赖检查、路径适配等。

更简单的官方推荐安装方法(针对Ruby 3.1.2)

rbenv+ruby-build本身就是Ruby官方认可的用户级安装方式,可简化如下步骤:

方法一:用官方脚本一键安装rbenv+ruby-build

  1. 确保集群已预装基础工具(git、curl、编译依赖如build-essential等,无权限安装依赖可跳过,ruby-build会尝试自动适配)
  2. 执行官方安装脚本:
curl -fsSL https://github.com/rbenv/rbenv-installer/raw/main/bin/rbenv-installer | bash
  1. 配置shell环境(仅需执行一次,后续登录自动生效):
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
source ~/.bashrc
  1. 安装并设置Ruby 3.1.2为全局版本:
rbenv install 3.1.2
rbenv global 3.1.2
  1. 验证安装结果:
ruby -v

方法二:直接用ruby-build安装单一版本(无需rbenv)

若仅需安装Ruby 3.1.2,可跳过rbenv,直接用ruby-build安装到用户目录:

git clone https://github.com/rbenv/ruby-build.git
PREFIX=~/.local ./ruby-build/install.sh
~/.local/bin/ruby-build 3.1.2 ~/.local
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

补充说明

  • 若集群有Snap环境限制,rbenv的用户级安装不会触发权限问题,因为所有文件均存储在用户主目录内,不属于系统级修改。
  • 手动克隆仓库的方式与官方脚本本质一致,但官方脚本更高效,还能自动处理后续的版本更新。

内容的提问来源于stack exchange,提问作者Charlie Parker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 12:15:33