ruby - Jekyll:尽管安装了最新版本,但命令未发现问题

我在安装 Jekyll 时遇到问题。 Ruby、Homebrew 和 Gems 的一切都是最新的:

Quocs-MacBook-Air:~ quochoantrinh$ brew -v
Homebrew 2.1.6
Homebrew/homebrew-core (git revision 2796; last commit 2019-07-01)
Quocs-MacBook-Air:~ quochoantrinh$ ruby -v
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin16]
Quocs-MacBook-Air:~ quochoantrinh$ gem -v
3.0.3

然后我从官方网站 (https://jekyllrb.com/docs/installation/macos/) 的 macOS 设置中的 Jekyll 运行以下命令

export PATH=/usr/local/opt/ruby/bin:$PATH

然后我执行了下一个命令:

gem install --user-install bundler jekyll
export PATH=$HOME/.gem/ruby/2.6.3/bin:$PATH

但是,当我在终端中运行 jekyll 时,它会提示“找不到命令”。

这是我的 gem 环境

Quocs-MacBook-Air:~ quochoantrinh$ gem env
RubyGems Environment:
  - RUBYGEMS VERSION: 3.0.3
  - RUBY VERSION: 2.6.3 (2019-04-16 patchlevel 62) [x86_64-darwin16]
  - INSTALLATION DIRECTORY: /Users/quochoantrinh/.rvm/gems/ruby-2.6.3
  - USER INSTALLATION DIRECTORY: /Users/quochoantrinh/.gem/ruby/2.6.0
  - RUBY EXECUTABLE: /usr/local/opt/ruby/bin/ruby
  - GIT EXECUTABLE: /usr/bin/git
  - EXECUTABLE DIRECTORY: /Users/quochoantrinh/.rvm/gems/ruby-2.6.3/bin
  - SPEC CACHE DIRECTORY: /Users/quochoantrinh/.gem/specs
  - SYSTEM CONFIGURATION DIRECTORY: /usr/local/Cellar/ruby/2.6.3/etc
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86_64-darwin-16
  - GEM PATHS:
     - /Users/quochoantrinh/.rvm/gems/ruby-2.6.3
     - /Users/quochoantrinh/.rvm/rubies/ruby-2.6.3/lib/ruby/gems/2.6.0
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :backtrace => false
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - https://rubygems.org/
  - SHELL PATH:
     - /usr/local/opt/ruby/bin
     - /Users/quochoantrinh/.yarn/bin
     - /Users/quochoantrinh/.config/yarn/global/node_modules/.bin
     - /Users/quochoantrinh/anaconda3/bin
     - /Users/quochoantrinh/anaconda3/bin
     - /Users/quochoantrinh/anaconda/bin
     - /Users/quochoantrinh/.gem/ruby/2.6.3/bin
     - /Users/quochoantrinh/.rvm/gems/ruby-2.6.3/bin
     - /Users/quochoantrinh/.rvm/gems/ruby-2.6.3@global/bin
     - /Users/quochoantrinh/.rvm/rubies/ruby-2.6.3/bin
     - /Users/quochoantrinh/.yarn/bin
     - /Users/quochoantrinh/.config/yarn/global/node_modules/.bin
     - /Users/quochoantrinh/anaconda3/bin
     - /Users/quochoantrinh/anaconda3/bin
     - /Users/quochoantrinh/anaconda/bin
     - /usr/local/bin
     - /usr/bin
     - /bin
     - /usr/sbin
     - /sbin
     - /Library/Frameworks/Mono.framework/Versions/Current/Commands
     - /Users/quochoantrinh/.rvm/bin

最佳答案

这里发生了一些事情,但要解决您眼前的问题,我相信应该这样做:

export PATH="$HOME/.gem/ruby/2.6.0/bin:$PATH"

当您使用 --user-install 标志时,它会在您运行 gem env 时提到的 USER_INSTALLATION_DIRECTORY 中安装 gems,这在你的情况下是/Users/quochoantrinh/.gem/ruby/2.6.0,然后你必须在将它添加到PATH时添加/bin 。与其说您想更改 USER_INSTALLATION_DIRECTORY,不如说您需要将 PATH 设置为指向 USER_INSTALLATION_DIRECTORY。我知道这不是很直观,因为您会认为您想要使用与当前 Ruby 版本 (2.6.3) 相对应的路径,但 USER_INSTALLATION_DIRECTORY 始终以 0 结尾。它只使用Ruby 版本的前 2 位数字。如果您升级到 2.7.2,这是今天的最新版本,您的 PATH 必须指向 2.7.0

请注意,运行上面的 export PATH 命令只会在当前 session 期间有效。如果您希望每次退出并重新启动终端或打开新选项卡时都能够使用 jekyll,则需要将 export PATH 命令添加到您的 shell 启动文件中,通常是 ~/.bash_profile~/.zshrc。如果您不确定您使用的是哪个 shell,请阅读:https://www.moncefbelyamani.com/which-shell-am-i-using-how-can-i-switch/

我还注意到您似乎同时安装了带有 Homebrew 和 RVM 的 Ruby。这可能会导致问题。我总是建议人们使用 Ruby 管理器(例如 RVM、rbenv 和 chruby)安装 Ruby,因为它们中的大多数会自动为您设置好一切。您不必担心手动设置 PATH 和考虑是否添加 --user-install。我喜欢的经理是 chruby因为它最轻且最易于使用。

根据您的 gem env,您目前似乎正在使用 Homebrew 版本的 Ruby,因此我想让您知道您可能会遇到的另一个问题。 (我可以通过查看 RUBY_EXECUTABLE 来判断它是 Homebrew,并且我从经验中知道 Homebrew 在 /usr/local 中安装了一些东西,并且我将该路径识别为 Homebrew Ruby。 )

假设你想在几个月后安装 rails,你输入 gem install rails(没有 --user-install 标志).安装后,如果您尝试使用 rails 命令,您将得到“command not found”,因为当您使用 Ruby 的 Homebrew 版本时,您不使用 -- user-install,gem 将安装在由 Homebrew 管理的目录中,而不是在您的 USER_INSTALLATION_DIRECTORY 中。 Jekyll 文档忘记指出您需要将 Homebrew gems 位置添加到您的 PATH。我的 definitive guide to installing Ruby gems on a Mac 中包含修复程序, 以及 pull request I opened to fix the Jekyll documentation .

要进一步了解 PATH 的工作原理,以及为什么会出现“找不到命令”错误,我推荐这篇文章: https://www.moncefbelyamani.com/troubleshooting-command-not-found-in-the-terminal/

https://stackoverflow.com/questions/56844252/

相关文章:

python - 如何模拟类方法的 cls 参数?

python-3.x - 如何将 direnv 与 python venv 一起使用?

sql - 如何在 AWS Athena 中编写多个 SQL 语句,如 CREATE 表(使用 CL

reactjs - 我是否需要在功能性 React 组件中对功能 Prop 使用 useCallba

ios - 如何加密/解密安全 QR - 在 Swift 中编码为可读格式

php - woocommerce 自定义订单状态和 REST API

android-studio - 安卓工作室 : Cannot get DialogFragment

javascript - 如何确保我的第一个 React 渲染具有来自 localStorage 的

javascript - 无法删除 _fbp Cookie

vue.js - 动态路由器链接将 *slash* 更改为 %2F