在 Mac M1 上切换 ruby 版本

问题描述 投票:0回答:1

我想在我的 Mac M1 上切换 Ruby 版本。我的理解是,Mac 附带了预安装的 Ruby 版本(就我而言,当我运行

ruby -v
时,我得到:

ruby 2.6.10p210 (2022-04-12 revision 67958) [universal.arm64e-darwin23]

我已经用brew安装了ruby:

ruby 3.3.1 is already installed and up-to-date.

如何切换到此版本?到目前为止,我在网上找到并尝试过的任何东西都对我没有帮助。

我觉得我的一个配置文件中的某些内容可能会在某处导致冲突,不允许我切换版本。

这是我的

.zshrc

if [ -d "/opt/homebrew/opt/ruby/bin" ]; then
  export PATH=/opt/homebrew/opt/ruby/bin:$PATH
  export PATH=⁠ gem environment gemdir ⁠/bin:$PATH
fi

#export PATH="/opt/homebrew/opt/ruby/bin:$PATH"

#[ -f "/Users/xxx/.ghcup/env" ] && source "/Users/xxx/.ghcup/env" # ghcup-env
export PATH=/usr/local/bin:$PATH
export PATH="$PATH:/Users/xxx/Library/Application Support/Coursier/bin"


export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/Users/xxx/opt/anaconda3/bin/conda' 'shell.zsh' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
    eval "$__conda_setup"
else
    if [ -f "/Users/xxx/opt/anaconda3/etc/profile.d/conda.sh" ]; then
        . "/Users/xxx/opt/anaconda3/etc/profile.d/conda.sh"
    else
        export PATH="/Users/xxx/opt/anaconda3/bin:$PATH"
    fi
fi

unset __conda_setup
# <<< conda initialize <<<

[ -f "/Users/xxx/.ghcup/env" ] && source "/Users/xxx/.ghcup/env" # ghcup-env

if [ "$ARCH" = '' ]
then
  ARCH=⁠ arch ⁠
fi
export TOOLDIR=$HOME/c-tools
export PATH="$TOOLDIR/bin:$TOOLDIR/bin/$ARCH:$PATH"
if [ "$MANPATH" = '' ]
then
  export MANPATH=$TOOLDIR/man
else
  export MANPATH=${MANPATH}:$TOOLDIR/man
fi

export PATH="$PATH:/Users/xxx/flutter/flutter-2/bin"

# The next line updates PATH for the Google Cloud SDK.
if [ -f '/Users/xxx/google-cloud-sdk/path.zsh.inc' ]; then . '/Users/xxx/google-cloud-sdk/path.zsh.inc'; fi

# The next line enables shell command completion for gcloud.
if [ -f '/Users/xxx/google-cloud-sdk/completion.zsh.inc' ]; then . '/Users/xxx/google-cloud-sdk/completion.zsh.inc'; fi

export JAVA_HOME=$(/usr/bin/java)

#THIS MUST BE AT THE END OF THE FILE FOR SDKMAN TO WORK!!!
export SDKMAN_DIR="$HOME/.sdkman"
[[ -s "$HOME/.sdkman/bin/sdkman-init.sh" ]] && source "$HOME/.sdkman/bin/sdkman-init.sh"

这是我的

.bash_profile

# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/Users/xxx/opt/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
    eval "$__conda_setup"
else
    if [ -f "/Users/xxx/opt/anaconda3/etc/profile.d/conda.sh" ]; then
        . "/Users/xxx/opt/anaconda3/etc/profile.d/conda.sh"
    else
        export PATH="/Users/xxx/opt/anaconda3/bin:$PATH"
    fi
fi
unset __conda_setup
# <<< conda initialize <<<

. "$HOME/.cargo/env"

# >>> coursier install directory >>>
export PATH="$PATH:/Users/xxx/Library/Application Support/Coursier/bin"
# <<< coursier install directory <<<

#THIS MUST BE AT THE END OF THE FILE FOR SDKMAN TO WORK!!!
export SDKMAN_DIR="$HOME/.sdkman"
[[ -s "$HOME/.sdkman/bin/sdkman-init.sh" ]] && source "$HOME/.sdkman/bin/sdkman-init.sh"

export PATH=${PATH}:/Users/xxx/prolog/bin/sicstus-4.7.0

这是我的

.profile

export PATH=$PATH:/usr/local/go/bin

# >>> coursier install directory >>>
export PATH="$PATH:/Users/xxx/Library/Application Support/Coursier/bin"
# <<< coursier install directory <<<

我知道以上大部分内容都是无关紧要的,但我给出这些是因为我觉得某些地方可能存在冲突导致了我的问题。

ruby macos apple-m1
1个回答
0
投票

就个人而言,我使用

ruby-install
下载我的 ruby 版本,并使用
chruby
进行切换。其他流行的版本管理器是 RVM 和 RBenv,它们都具有一体化安装和切换 rubies 的功能。不过,我更喜欢
chruby
ruby-install
的轻量性。

对于 ruby-install/chruby,它看起来像这样:

# first install via homebrew
brew install ruby-install 
brew install chruby 

安装 chruby 后,您需要在 .zshrc 文件中添加几行:

source /opt/homebrew/opt/chruby/share/chruby/chruby.sh
source /opt/homebrew/opt/chruby/share/chruby/auto.sh

然后在命令行中,只需执行以下操作:

# download ruby 
ruby-install ruby-3.3.1 # or whichever version

# Switch ruby version
chruby ruby-3.3.1
© www.soinside.com 2019 - 2024. All rights reserved.