[英]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]
運行這個命令
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 OS和MacBook 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 中的步驟。
$ brew install rbenv
$ rbenv init
並按照它給你的說明進行操作。 這是我得到的:~ $ rbenv init
# Load rbenv automatically by appending
# the following to ~/.bash_profile:
eval "$(rbenv init -)"
我更新了我的~/.bash_profile
...
$ curl -fsSL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-doctor | bash
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 不依賴於墊片,而是只修改PATH
, GEM_HOME
, GEM_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 有幾個問題。
為了減少這么多的努力,我建議使用 rvm,讓生活更輕松。 按照此鏈接安裝 rvm https://nrogap.medium.com/install-rvm-in-macos-step-by-step-d3b3c236953b
我嘗試了所有解決方案,但對我沒有任何幫助。 甚至我也在.zshrc
文件中包含了路徑。
就我而言,我使用的是裝有 macOS Ventura 13.2
的MacBook 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.