簡體   English   中英

rbenv 沒有改變 ruby 版本

[英]rbenv not changing ruby version

我按照 github 的說明安裝了 rbenv。 我正在運行 OSX,但我已在 Ubuntu 12.04 VM 上嘗試過此操作並獲得了相同的結果。 以下是我嘗試更改 ruby 版本時在終端中得到的內容:

rbenv versions
* 1.9.3-p0 (set by /Users/user/.rbenv/version)
1.9.3-p125

rbenv global
1.9.3-p0

rbenv rehash

ruby -v
ruby 1.8.7 (2011-12-28 patchlevel 357) [universal-darwin11.0]

which ruby
/usr/bin/ruby

任何人都知道為什么 rbenv 沒有像它認為的那樣切換 ruby 版本? 本地目錄中還有 no.rbenv 文件會導致 ruby 版本默認為 1.8.7

rbenv local
rbenv: no local version configured for this directory

檢查 PATH 是否包含$HOME/.rbenv/shims$HOME/.rbenv/bin

$ env | grep PATH

如果使用 bash 或 ~/.zshenv 如果使用 zsh,還要檢查您的 ~/.bash_profile 中是否包含以下內容

export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"

注意:確保它是 ~/.bash_profile 中的最后一個設置。 我遇到了一個問題,我安裝了一個更新我的 .bash_profile 並重置 PATH 的程序。

最后,確保你的$HOME文件夾沒有一個.ruby-version ,你可能意外創建如果你已經做文件$ rbenv local <ruby-version>$HOME文件夾。 執行$ rbenv global <ruby-version>修改$HOME/.rbenv/version文件, $HOME文件夾中.ruby-version文件的存在將覆蓋$HOME/.rbenv/version設置的$HOME/.rbenv/version

從文檔:

選擇 Ruby 版本當您執行 shim 時,rbenv 通過從以下來源讀取它來確定要使用的 Ruby 版本,按此順序:

RBENV_VERSION 環境變量(如果指定)。 您可以使用 rbenv shell 命令在當前 shell 會話中設置此環境變量。

通過搜索您正在執行的腳本的目錄及其每個父目錄直到到達文件系統的根目錄,找到第一個 .ruby-version 文件。

通過搜索當前工作目錄及其每個父目錄直到到達文件系統的根目錄找到的第一個 .ruby-version 文件。 您可以使用 rbenv local 命令修改當前工作目錄中的 .ruby-version 文件。

全局 ~/.rbenv/version 文件。 您可以使用 rbenv 全局命令修改此文件。 如果全局版本文件不存在,rbenv 假定您要使用“系統”Ruby——即如果 rbenv 不在您的路徑中,將運行任何版本。

我通過將以下內容添加到我的~/.bash_profile來解決這個問題:

#PATH for rbenv
export PATH="$HOME/.rbenv/shims:$PATH"

這是https://github.com/sstephenson/rbenv 中記錄的內容

從我可以告訴有沒有~/.rbenv/bin的目錄,這是在后通過@rodowi提及。

這可能是一個老問題,但谷歌把我帶到這里,為了后代,我想我會分享。

在上述許多推薦的解決方案之后,我的問題仍然存在。 像OP一樣,我安裝了rbenv,然后安裝了ruby版本,但我的筆記本電腦默認為系統。 我忽略的是,當我跑的時候:

[~/.rbenv] $ rbenv versions
* system (set by /Users/alphadogg/.rbenv/version)
  2.0.0-p247

IOW,它仍然默認為系統。 一個快速

[~/.rbenv] $ rbenv local 2.0.0-p247

將其切換到新版本。

第一步是找出正在調用哪個 ruby​​:

$ which ruby

你的系統說:

/usr/bin/ruby

這不是 rbenv 使用的墊片,它(在 MacOS 上)應該如下所示:

/Users/<username>/.rbenv/shims/ruby

shim 實際上是一個腳本,它的作用類似於重定向到您設置的 ruby​​ 版本。

我建議您在排除故障時取消設置特定於項目的“本地”版本和特定於 shell 的“shell”版本,然后使用在 ~/.rbenv/version 中的純文本文件中確定的“全局”版本設置進行測試在您的情況下,將只是版本號“1.9.3”。

$ rbenv global 1.9.3
$ rbenv local --unset
$ rbenv shell --unset

您可以在項目文件夾(不是主文件夾)的根目錄中執行ls -laG以確保那里不再有“.ruby-version”文件。

您可以使用rbenv versions來確定 rbenv 設置為使用哪個版本(以及設置該版本的文件的位置和名稱):

$ rbenv versions

在您正確設置路徑之前,這些都不重要。

使用它來確保你的 *MacOS 會服從你:

$ rbenv init -

其次是:

$ which ruby

確保它看起來像:

/Users/<username>/.rbenv/shims/ruby

然后運行此行以將行添加到您的配置文件中,以便每次打開新終端窗口時它都會運行:

$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile

還有其他修改路徑的方法,可以隨意替換其中任何一個,而不是運行 rbenv init。

注意:使用以下命令重新安裝 Rails:

$ gem install rails

如果您嘗試運行 Ruby on Rails,那么您需要先讓這一切正常運行,然后再次安裝 rails gem。 以前安裝的 Rails 將使用硬編碼路徑到錯誤的 ruby​​ 並且其他一些東西將位於錯誤的位置,因此只需再次安裝 gem。

PS 如果您的 MacOS 不服從您(* 上面提到的),那么您可能必須找到另一種方法來修改您的路徑,但這不太可能成為問題,因為“Mac 可以正常工作”;)

我剛剛發現了同樣的問題。 我所做的是卸載rbenv(通過自制軟件)並重新安裝它。 我還加了

if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi

當我重新安裝 rbenv 時進入 ~/.bash_profile 。 現在完美運行。

在我的情況下,更改~/.zshenv不起作用。 我必須在~/.zshrc進行更改。

我剛剛補充說:

# Include rbenv for ZSH
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"

~/.zshrc的頂部,重新啟動外殼並注銷。

檢查它是否有效:

➜  ~ rbenv install 2.4.0
➜  ~ rbenv global 2.4.0
➜  ~ rbenv global
2.4.0
➜  ~ ruby -v
ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-darwin16]

運行這個命令

將 rbenv 添加到 bash 以便每次打開終端時加載

echo 'if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi' >> ~/.bash_profile
source ~/.bash_profile

這將解決您的問題參考

如果您使用的是bash ,請轉到

~/.bash_profile

並添加以下行(如果它還沒有)

if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi

如果您使用的是 Zsh,請轉到

~/.zshrc

並在 .zshrc 文件的末尾添加相同的代碼行。

然后只需重新啟動您的終端,現在應該沒問題了。

rbenv help shell

“通過在您的 shell 中設置 'RBENV_VERSION' 環境變量來設置特定於 shell 的 Ruby 版本。此版本覆蓋本地應用程序特定的版本和全局版本。應該是與 rbenv 已知的 Ruby 版本匹配的字符串。特殊版本字符串 'system ' 將使用您的默認系統 Ruby。運行 rbenv versions' 以獲取可用 Ruby 版本的列表。”

如果 rbenv 安裝正確, ruby​​ -v 將對應

rbenv shell 1.9.3-p125

我有同樣的問題,但由 Homebrew 引起的:

[~]$ rbenv version
2.3.0 (set by /Users/user/.rbenv/version)
[~]$ ruby -v
ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-darwin16]
[~]$ which ruby
/usr/local/bin/ruby

不知何故,我也通過 Homebrew 安裝了 Ruby,並且 Homebrew 路徑在我的$PATH中的 rbenv 路徑之前。 運行brew uninstall ruby為我修復了它。

跑步:

rbenv init

運行之后,當我設置本地 rbenv 版本時:

rbenv local 2.4.0

然后我的ruby -v和我的rbenv local版本一致。

注意:你可能還想退出你所在的目錄,然后再回到它,我注意到這對我來說是必要的,以便讓事情正常工作。

我在MacBook Pro Catalina OSMacBook Pro Big Sur上使用rbenv設置Ruby時遇到了這個問題。

這是我修復的方法

首先運行下面的命令來初始化rbenv:

rbenv init

這會給你一些關於做什么的指導。 基本上,您必須打開~/.zshrc文件並將其添加到文件eval "$(rbenv init -)" 您可以通過運行以下命令來完成此操作:

echo 'eval "$(rbenv init -)"' >> ~/.zshrc

接下來,運行以下命令來設置您的 ruby​​ 版本:

rbenv local your-desired-ruby-version

就我而言,我想要的 ruby​​ 版本是 3.0.1,所以它是:

rbenv local 3.0.1

完成后,使用Command + Q退出終端,然后打開一個新終端,這次運行命令時:

ruby -v 
rbenv versions

你會看到你想要的 ruby​​ 版本已經為你設置好了。

就這樣。

我希望這有幫助

至於我用最簡單的方法rbenv沿zsh是增加rbenv中的插件部分.zshrc配置。 就我而言,它看起來類似於:

# Which plugins would you like to load? (plugins can be found in ~/.oh-my-zsh/plugins/*)
# Custom plugins may be added to ~/.oh-my-zsh/custom/plugins/
# Example format: plugins=(rails git textmate ruby lighthouse)
# Add wisely, as too many plugins slow down shell startup.
plugins=(git bower rails ruby rbenv gulp npm node nvm sublime)

之后,在rbenv幫助下安裝、切換、使用 ruby​​ 版本時沒有問題。

請注意在進行更改后重新啟動終端會話。

對於魚殼用戶

set --universal fish_user_paths $fish_user_paths ~/.rbenv/shims/

我遇到了同樣的問題。 通過使用sudo運行rbenv global命令來修復此問題。 我認為這是許可問題。

更新:我終於找到了解決方案。 我的 mac 上有一個相同的文件“版本”,它位於/usr/local/Cellar/rbenv/0.3.0/下。 我認為它是偶爾錯誤地創建的。 你應該刪除它。

當我出現這些症狀時,問題是我嘗試切換到的新 Ruby 版本的安裝中途失敗,而我沒有注意到。 解決方法是刪除並重新安裝它。

(這意味着即使 ruby​​ 1.9.3 出現在可用版本的 rbenv 列表中,它在 rbenv 假定的路徑上沒有可執行文件。由於 rbenv 試圖通過預先添加一個位置來更改您的 ruby​​ 版本您的路徑,如果它前面的位置實際上沒有任何內容,您的操作系統將很樂意繼續搜索您的默認路徑並找到您的系統版本,在我的情況下就像問題的 1.8.7。)

確保.bash_profile的最后一行是:

export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"

接受的答案建議添加以下內容:

export PATH="$HOME/.rbenv/bin:$PATH"

這不適用於 OP 引用的 Mac OSX。 事實上,如果你通過brew install rbenv ,這確實是 Mac OSX 中唯一的安裝方法,因為curl -fsSL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-installer | bash curl -fsSL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-installer | bash將在 OSX 中失敗,然后 rbenv 可執行文件將安裝在:

$ which rbenv
/usr/local/bin/rbenv

但是,即使在 OSX 中,rbenv 根目錄仍將保留在 $HOME 目錄中:

~ viggy$ rbenv root
/Users/viggy/.rbenv

這是什么意思? 這意味着當您安裝 rubies 時,它們將安裝在 .rbenv 下的給定主目錄中:

$ rbenv install 2.6.0
$ ls ~/.rbenv/versions
2.6.0

現在 brew 安裝完成了一些您必須在 Linux 中手動執行的工作。 例如,在 Linux 中,您必須手動安裝 ruby​​-build 作為插件:

$ mkdir -p "$(rvbenv root)/plugins"
$ git clone https://github.com/rbenv/ruby-build.git "(rbenv root)"/plugins/ruby-build

這已經通過自制軟件安裝完成了。 有一個重要的步驟必須在 homebrew 安裝中完成,就像在 Linux 安裝中一樣。 您必須將 rbenv 墊片添加到您的路徑中。 為此,當您的 shell 啟動時,您必須評估以下命令(它將依次將 rbenv 墊片添加到 $PATH 的開頭):

$ vim ~/.bash_profile
eval "$(rbenv init -)"
$ source ~/.bash_profile

現在,當您運行echo $PATH ,您將看到 rbenv 墊片:

$ echo $PATH
/Users/viggy/.rbenv/shims:

現在檢查您的 ruby​​ 版本,它將反映安裝的 rbenv ruby​​:

ruby -v
ruby 2.6.0p0 

在我重新安裝rbenv后,這發生在我rbenv 顯然我的主目錄中有一個.ruby-version文件,指定了一個不再存在的版本。 刪除文件后,一切正常。

有很多誤導性的答案是有效的。 我認為值得一提rbenv README 中的步驟。

  1. $ brew install rbenv
  2. $ rbenv init並按照它給你的說明進行操作。 這是我得到的:
~ $ rbenv init
# Load rbenv automatically by appending
# the following to ~/.bash_profile:

eval "$(rbenv init -)"

我更新了我的~/.bash_profile ...

  1. 關閉終端並再次打開它
  2. 通過運行驗證它是否正常工作:
$ curl -fsSL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-doctor | bash
  1. 現在只需通過執行以下rbenv install <version>您想要的版本: rbenv install <version>

Linux / Ubuntu 用戶步驟 1:

$ rbenv versions
  system
  2.6.0
* 2.7.0 (set by /home/User/Documents/sample-app/.ruby-version) #Yours will be different
  2.7.2

第2步:

$ nano /home/User/Documents/sample-app/.ruby-version

第 3 步:

$ ruby -v
ruby 2.7.2p137 (2020-10-01 revision 5445e04352) [x86_64-linux]

將以下內容添加到.bashrc對我有用 -

export PATH="$HOME/.rbenv/shims:$PATH"

奇怪的是, rbenv版本沒有設置.rbenv文件。

檢查: ls -ltra --> 以查看是否寫入了rbenv

您可以嘗試使用chruby嗎? chruby 不依賴於墊片,而是只修改PATHGEM_HOMEGEM_PATH

我在安裝 rbenv 之前忘記刪除 rvm。 我刪除了 rvm 並重新安裝了 rbenv,但系統仍然沒有使用 rbenv 指定為全局的 Ruby 版本。 我嘗試關閉終端,但只有在我重新啟動整台機器后才有效。

這里的所有其他答案都為各種情況提供了很好的建議,但有一種更簡單的方法。

rbenv 文檔將我們指向 rbenv-doctor 診斷工具,該工具將快速驗證您系統上的所有這些潛在缺陷:

curl -fsSL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-doctor | bash

當一切順利時,你會看到:

$ curl -fsSL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-doctor | bash                                     <aws:hd-pmp-developer>
Checking for `rbenv' in PATH: /usr/local/bin/rbenv
Checking for rbenv shims in PATH: OK
Checking `rbenv install' support: /usr/local/bin/rbenv-install (ruby-build 20201005)
Counting installed Ruby versions: 1 versions
Checking RubyGems settings: OK
Auditing installed plugins: OK

現在,如果我們打破這些期望之一(例如刪除 rbenv-install),該工具將直接指向問題,並提供如何修復它的鏈接:

$ mv /usr/local/bin/rbenv-install rbenv-install-GONE
                                                                      
$ curl -fsSL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-doctor | bash                                     
Checking for `rbenv' in PATH: /usr/local/bin/rbenv
Checking for rbenv shims in PATH: OK

===> Checking `rbenv install' support: not found <===
  Unless you plan to add Ruby versions manually, you should install ruby-build.
  Please refer to https://github.com/rbenv/ruby-build#installation

Counting installed Ruby versions: 1 versions
Checking RubyGems settings: OK
Auditing installed plugins: OK

將 eval "$(rbenv init -)" 添加到我的 mac 上的 .bash_profile 解決了這個問題。 rbenv local ruby​​ -v 給出了集合

我建議不要使用 rbenv 有幾個問題。

  1. 安裝 ruby​​ 后,它不會附帶捆綁版本
  2. 大多數時間在運行 bundle install 時創建 bundler 版本拾取問題

為了減少這么多的努力,我建議使用 rvm,讓生活更輕松。 按照此鏈接安裝 rvm https://nrogap.medium.com/install-rvm-in-macos-step-by-step-d3b3c236953b

在此處輸入圖像描述

顯然,當我使用Rosetta終端時它對我有用

您可以嘗試使用Rosetta終端做同樣的事情

通過進入

Finder > 實用程序 > 終端 > 獲取信息

我嘗試了所有解決方案,但對我沒有任何幫助。 甚至我也在.zshrc文件中包含了路徑。

就我而言,我使用的是裝有 macOS Ventura 13.2MacBook Pro M2 我正在使用React Native 0.71.2 ,它需要 Ruby 2.7.6版本。

我只是將以下代碼放在.zprofile而不是.zshrc中,它就起作用了:

export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init - zsh)"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM