为什么我的jekyll命令不再起作用?

Maë*_*aël 5 ruby rubygems jekyll github-pages

我最近发现jekyll,在完美使用几个月后,该命令在我的计算机上不再起作用。

每当我尝试运行jekyll命令时,它都会说:

/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/2.3.0/rubygems/dependency.rb:319:in `to_specs':
    Could not find 'jekyll' (>= 0) among 34 total gem(s) (Gem::LoadError)
Checked in 'GEM_PATH=/Users/Mael/.gem/ruby/2.3.0:/Library/Ruby/Gems/2.3.0:/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/gems/2.3.0',
    execute `gem env` for more information
    from /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/2.3.0/rubygems/dependency.rb:328:in `to_spec'
    from /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_gem.rb:65:in `gem'
    from /usr/local/bin/jekyll:22:in `<main>'
Run Code Online (Sandbox Code Playgroud)

我使用的是macOS Sierra(10.12.6)。

Xcode已安装

我的计算机上安装了Xcode:

$ xcode-select --install
xcode-select: error: command line tools are already installed, use "Software Update" to install updates
Run Code Online (Sandbox Code Playgroud)

重新安装Jekyll

检查Ruby版本并(重新)安装捆绑器

因此,我尝试像第一次那样重新安装Jekyll:

$ ruby -v
ruby 2.3.7p456 (2018-03-28 revision 63024) [universal.x86_64-darwin16]

$ sudo gem install bundler
Successfully installed bundler-1.17.1
Parsing documentation for bundler-1.17.1
Done installing documentation for bundler after 4 seconds
1 gem installed
Run Code Online (Sandbox Code Playgroud)

创建一个宝石文件

我创建了一个包含以下内容的Gemfile:

gem 'github-pages'
source 'https://rubygems.org'
Run Code Online (Sandbox Code Playgroud)

捆绑安装(问题来了)

并在包含Gemfile的目录中运行:

$ bundle install
Run Code Online (Sandbox Code Playgroud)

在这里,安装不起作用,它说:

An error occurred while installing commonmarker (0.17.13), and Bundler cannot continue.
Make sure that `gem install commonmarker -v '0.17.13' --source 'https://rubygems.org/'` succeeds before bundling.

In Gemfile:
  github-pages was resolved to 192, which depends on
    jekyll-commonmark-ghpages was resolved to 0.1.5, which depends on
      jekyll-commonmark was resolved to 1.2.0, which depends on
        commonmarker
Run Code Online (Sandbox Code Playgroud)

所以我尝试了gem install commonmarker -v '0.17.13' --source 'https://rubygems.org/'命令,它说:

Building native extensions.  This could take a while...
ERROR:  Error installing commonmarker:
        ERROR: Failed to build gem native extension.

    current directory: /Library/Ruby/Gems/2.3.0/gems/commonmarker-0.17.13/ext/commonmarker
/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/bin/ruby -r ./siteconf20181112-6105-u9aca2.rb extconf.rb
creating Makefile

current directory: /Library/Ruby/Gems/2.3.0/gems/commonmarker-0.17.13/ext/commonmarker
make "DESTDIR=" clean

current directory: /Library/Ruby/Gems/2.3.0/gems/commonmarker-0.17.13/ext/commonmarker
make "DESTDIR="
make: *** No rule to make target `/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0/universal-darwin16/ruby/config.h', needed by `arena.o'.  Stop.

make failed, exit code 2

Gem files will remain installed in /Library/Ruby/Gems/2.3.0/gems/commonmarker-0.17.13 for inspection.
Results logged to /Library/Ruby/Gems/2.3.0/extensions/universal-darwin-16/2.3.0/commonmarker-0.17.13/gem_make.out
Run Code Online (Sandbox Code Playgroud)

我注意到我的(2.0.0)目录中有几个jekyllgithub-pages gems/Library/Ruby/Gems/2.0.0/gems

github-pages-146
github-pages-health-check-1.3.5
...
jekyll-3.4.5
jekyll-avatar-0.4.2
jekyll-coffeescript-1.0.1
[and several other jekyll directories]
...
Run Code Online (Sandbox Code Playgroud)

但是不在我的/Library/Ruby/Gems/2.3.0/gems (2.3.0)目录中!(似乎是GEM_PATH运行jekyll命令时针对的对象)

所以,也许我做了一些改变版本的事情。(我最近安装了(osxfuse并且sshfs通过brew),我不知道是否与该问题有关?)

我对Ruby,Gems系统等一无所知。也许解决方案很明显,但是我尝试了几项都没有成功。

(抱歉,它有点长,但是我想尽可能清楚一些!)

小智 5

我也不使用 Ruby,但我在 Mac OS 10.12.6 上遇到了类似的问题,这是我解决的方法。

这很可能是系统 Ruby 环境和 Jekyll 之间存在一些分歧造成的,最简单的修复方法是完全创建一个新环境。

首先,您应该使用rvm来管理您的 ruby​​ 版本,以避免删除系统 Ruby 并破坏您的操作系统。设置 rvm 后,运行

rvm install 2.3.3
Run Code Online (Sandbox Code Playgroud)

安装 Ruby 2.3.3(这是我使用的)。完成后,将其设为系统中的默认 Ruby 版本:

rvm --default use 2.3.3
Run Code Online (Sandbox Code Playgroud)

然后我做了以下事情:

gem install bundler
gem install jekyll
bundle install
Run Code Online (Sandbox Code Playgroud)

Jekyll 又为我工作了。

希望有帮助。


Maë*_*aël -1

我找到了一个解决方案,我认为它非常不干净,但目前有效。

我有两个目录/Library/Ruby/Gems/

  • 2.0.0/
    • gems/
    • specifications/
    • ...
  • 2.3.0/
    • gems/
    • specifications/
    • ...

当我尝试运行 jekyll 时,错误输出表明它检查(以及其他) in /Library/Ruby/Gems/2.3.0,但正如我在问题中所说,那里没有任何与 jekyll 相关的文件。

/Library/Ruby/Gems/2.0.0/gems因此,我手动复制了和 中的所有文件/Library/Ruby/Gems/2.0.0/specifications,并将它们分别粘贴到/Library/Ruby/Gems/2.3.0/gems和中/Library/Ruby/Gems/2.3.0/specifications

我猜想我复制的文件对于我拥有的 Ruby 版本来说可能已经过时了(?),但它工作得很好。

也许有一种更传统的方法可以让它发挥作用?