如何切换到使用 Homebrew 安装的 ruby 1.9.3?

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

我已经使用 hombrew

安装了 ruby 1.9.3

brew 安装红宝石

但仍然使用默认的1.8.7。如何切换 osx 使用 1.9.3 作为默认 ruby?

ruby macos osx-lion homebrew
11个回答
127
投票

简短回答:

通过自制程序安装 ruby 后,只需执行以下操作:

brew link --overwrite ruby

然后重新启动或重新打开您的终端  


长答案

所以我使用 homebrew 正常安装了 ruby

brew install ruby

安装得很好,但它仍然使用系统默认的 ruby。 我通过这样做验证了:

which ruby 
#/usr/bin/ruby

因此,根据 Matthew Rudy 的建议,我检查了 /etc/paths 的顺序,一切都很好。

然后我决定这样做:

which -a ruby
#/usr/bin/ruby
#usr/local/bin/ruby

所以没有任何东西被破坏。 尝试使用homebrew方法再次重新安装ruby,然后我找到了它。

自制提到:

Warning: ruby-2.3.1 already installed, it's just not linked

所以必须做:

brew link --overwrite ruby

96
投票

我建议你看看rvm。 然后您可以使用

rvm use 1.9.3 --default

将其设置为默认值

但是如果您对自制软件安装感到满意。

然后只需更改目录中的优先级即可

PATH

这是我的/etc/paths

# homebrews should always take precedence
/usr/local/bin

# the default stack
/usr/bin
/bin
/usr/sbin
/sbin

这通常对于 homebrew 来说很重要,否则系统版本的 git、ruby、pg_admin 等都将被使用,而不是 brew 版本。

如果你说

which -a ruby
你会看到所有已安装的红宝石,以及
PATH

中的优先级

例如。

$ which -a ruby
/Users/matthew/.rvm/rubies/ruby-1.9.3-p0/bin/ruby
/Users/matthew/.rvm/bin/ruby
/usr/bin/ruby


更新:我现在认为你不应该改变
/etc/paths

相反,您需要检查

.profile
.bashrc
.bash_login
中的哪一个正在加载到您的 shell 中,然后将
/usr/local/bin
添加到您的路径中。

对于我来说,我只有一个

.profile
。如果您的主目录中不存在这些文件,您可以创建该文件。

# homebrews should always take precedence
export PATH=/usr/local/bin:$PATH

49
投票

如果您想使用自制程序安装1.9.3,您可以按照以下步骤操作:

$ brew update
$ brew install rbenv
$ brew install ruby-build

安装 rbenv 和 ruby-build 后,您可以运行以下命令来安装 Ruby 1.9.3。

$ rbenv install 1.9.3-p125

现在如果您想默认使用1.9.3,您可以运行以下命令:

$ rbenv global 1.9.3-p125

11
投票

Ruby 由 Homebrew 在

/usr/local/opt/ruby
安装。所以,我们需要将此路径添加到
bash
Zsh

# Type this to find out which shell you're using (e.g., bash, Zsh)
echo $SHELL

# If you're using Bash (e.g., echo $SHELL returns /bin/bash)
echo 'export PATH="/usr/local/opt/ruby/bin:$PATH"' >> ~/.bash_profile

# If you're using Zsh
echo 'export PATH="/usr/local/opt/ruby/bin:$PATH"' >> ~/.zshrc

然后,获取文件

# E.g., if you're using bash
source ~/.bash_profile

最后验证ruby的版本

ruby -v

10
投票

我也有类似的情况。我使用 Homebrew 安装了 ruby。

which -a ruby
给了我以下输出:

#usr/local/bin/ruby
#/usr/bin/ruby

这意味着应该使用新安装的版本,但是

ruby --version
仍然返回旧的系统版本。

我退出终端(Cmd+Q),重新启动后

ruby --version
返回了正确的版本。因此,请确保在安装后重新启动终端,然后再尝试任何其他(可能不必要的)修复。


6
投票
brew install ruby

这将安装最新版本的 ruby,现在您想将其设置为默认使用,例如在我的情况下:

echo 'export PATH="/usr/local/opt/ruby/bin:$PATH"' >> ~/.zshrc

然后运行

source ~/.zshrc

这会将其设置为配置文件中的默认值

现在可以查看ruby的版本了

ruby -v

4
投票

简短: 请记下您要更改的内容。

如果您在 OS X 上并尝试使用 Ruby 来实现 Jekyll 之类的功能,那么请不要使用 homebrew,因为这就是 Apple 用于 Ruby 的用途,如果您不确定自己的用途,那么使用 Ruby 可能不太好。正在做。相反,请使用 rbenv 或 RVM。

少短: 我试图从默认版本切换到更新版本(从 2.0)以使用 Jekyll,因为它需要 Ruby 版本 2.2.5 及更高版本。我更新了它并安装了2.5版本,但是当我检查“ruby -v”时,它仍然是2.0。当我最终开始更改默认版本时,我无法安装我需要的包,因为我没有写入权限。例如,如果你遇到这样的事情,那么你可能也遇到了同样的问题

$ gem install jekyll bundler
ERROR:  While executing gem ... (Gem::FilePermissionError)    
    You don't have write permissions for the /Library/Ruby/Gems/2.0.0 directory.

0
投票

在 OSX 中,您可以使用以下命令更改路径:

sudo nano /etc/paths

然后添加路径或更改顺序。


0
投票

看到 Craig Wayne 的回答后,我想也许我在使用 Homebrew 安装 ruby 时错过了警告。所以我用

brew reinstall [email protected]
重新安装了它,结果是:

==> Caveats
By default, binaries installed by gem will be placed into:
  /usr/local/lib/ruby/gems/2.7.0/bin

You may want to add this to your PATH.

[email protected] is keg-only, which means it was not symlinked into /usr/local,
because this is an alternate version of another formula.

If you need to have [email protected] first in your PATH, run:
  echo 'export PATH="/usr/local/opt/[email protected]/bin:$PATH"' >> ~/.zshrc

For compilers to find [email protected] you may need to set:
  export LDFLAGS="-L/usr/local/opt/[email protected]/lib"
  export CPPFLAGS="-I/usr/local/opt/[email protected]/include"

For pkg-config to find [email protected] you may need to set:
  export PKG_CONFIG_PATH="/usr/local/opt/[email protected]/lib/pkgconfig"

所以我的解决方案是将

/usr/local/opt/[email protected]/bin:
添加到
~/.zshrc
中 PATH 的开头。


0
投票

就我而言, 酿造链接——覆盖红宝石-f 不起作用,它不能覆盖所有链接(也许不应该)。

如果您查看该命令的输出:

Warning: Refusing to link macOS provided/shadowed software: ruby
If you need to have ruby first in your PATH, run:

    echo 'export PATH="/usr/local/opt/ruby/bin:$PATH"' >> ~/.zshrc

For compilers to find ruby you may need to set:

    export LDFLAGS="-L/usr/local/opt/ruby/lib"
    export CPPFLAGS="-I/usr/local/opt/ruby/include"

For pkg-config to find ruby you may need to set:
    
    export PKG_CONFIG_PATH="/usr/local/opt/ruby/lib/pkgconfig"

只需按照上面的答案调整优先级,如果您使用 zsh,我建议改为运行此命令:

echo 'export PATH="/usr/local/opt/ruby/bin:$PATH"' >> ~/.zshenv

要与 gcc 或 g++、clang 等集成,只需在 ~/.zshenv 中设置 LDFLAGS 和 CPPFLAGS 即可。


-2
投票

作为其他寻求此问题答案的人的替代方法 - 您可以在 .bash_profile 中设置别名,例如

ruby="/usr/local/bin/ruby"

这就是我解决这个问题的方法

© www.soinside.com 2019 - 2024. All rights reserved.