在Windows上使用Jekyll:Pygments无法工作

41

我之前一直使用 RC 版本,但现在已更新至最新的 JekyllBuild(1.0.3)。然而,在更新后,代码解析(使用 Pygments)无法正常工作。我一直收到以下错误:

C:/Ruby193/lib/ruby/gems/1.9.1/gems/posix-spawn-0.3.6/lib/posix/spawn.rb:162: warning: cannot close fd before spawn
←[31m  Liquid Exception: No such file or directory - /bin/sh in 2012-01-17-test-post.md←[0m

有没有人也遇到过这个问题?

我对Ruby一无所知,所以无法自行调试 :(


嗯,令人困扰的部分似乎是Pygments.rb...你使用的是哪个版本? - mhutter
我已经安装了1.6版本。我的Ruby是1.9.3,Python是3.2。 - Sebastian Sebald
我遇到了同样的问题。我尝试在我的_config.yaml中禁用Pygments,但我仍然收到相同的错误消息。 - Syllepsis
那么也许不是Pygments的问题?如果我不使用代码块({% ... %}),一切都很正常。 - Sebastian Sebald
尝试在这里下载便携版 http://www.madhur.co.in/blog/2013/07/20/buildportablejekyll.html - Madhur Ahuja
根本原因是pygments.rb中的一个错误。请在https://github.com/tmm1/pygments.rb/pull/90投票支持该拉取请求。 - Colonel Panic
10个回答

51

我有同样的问题。看起来 Pygments.rb 0.5.1 存在问题。通过回滚到 Pygments 0.5.0,错误消失了。

gem uninstall pygments.rb --version ">0.5.0"
gem install pygments.rb --version "=0.5.0"

希望这可以帮到你。


2
对我没用。操作系统:Win8。最新的Ruby、DevKit、Jekyll等。猜测错误在于试图在Windows上尝试“快乐之地”。 - Daniel
2
我曾经遇到过类似的问题,当时使用的是Python 3.2版本。后来我卸载了它,安装了Python 2.7.5版本,所有问题都得到了解决,即使是在使用pygments.rb 0.5.2版本时也没有出现问题。但是,在运行Jekyll之前,我必须将代码页设置为65001,使用chcp 65001命令进行设置,因为我的源文件是utf-8编码的。 - Rudy Velthuis
谢谢。这对我很有帮助。 :) 为了使jekyll工作,我必须将Python的路径和Python/Scripts目录路径定义到Windows Path变量中。我正在使用Windows 8。 - Muhammad Resna Rizki Pratama
确实,正如@RudyVelthuis所说,您必须在运行jekyll之前使用chcp 65001... - konus
运行gem uninstall pygments.rb而不指定版本。如果您安装了多个版本(就像我一样),它将让您从列表中选择并卸载它们。我安装了0.4.2、0.5.4和0.5.1三个版本,所以我删除了不需要的两个版本,并且它像魅力般地运行。 - robabby
显示剩余3条评论

17

在zzheng的解释基础上,如果您仍然遇到问题,请尝试运行gem list命令。然后确保pygments.rb (0.5.2)未安装。如果已经安装了,请执行以下命令。

gem uninstall pygments.rb --version "=0.5.2"

这应该解决了你的问题,现在你应该能够愉快地在Windows上使用Jekyll发布了。

编辑:根据我的经验,这可能会导致另一个错误。Liquid Error: Failed to get header. in 2013-07-20-post-name-here.md。 (未经证实的)解决方案是如果你还没有安装Python 2.7.*,那么安装它,尽管有些人报告说这并不能解决问题。

更多阅读:

Jekyll Github Issue #1181

Pygments.rb Github Issue #45

在Win7中运行jekyll --server失败


1
这解决了我在Windows上的问题。另外,通过在C:\RailsInstaller\Ruby1.9.3\setup_environment.bat中添加路径'C:\Python27;'。 - Mon Noval
感谢您的帮助 - 回到 Python 2.7.*(从3.4.1)解决了我的问题。 - Rowan Miller

6
如果您在config.yml中添加highlighter: false,可以完全避免加载Pygments。

对我有用。谢谢。 - Colonel Panic

2
最近,我发现在 Windows 上部署 Jekyll 或其他环境的最佳方式是使用 http://scoop.sh/https://chocolatey.org/
这个错误主要是因为Windows Shell找不到命令“which”,但Cygwin和MinGW可以。我认为最好的解决方案是修改popen.rb如下:
# Detect a suitable Python binary to use. We can't just use `python2`
# because apparently some old versions of Debian only have `python` or
# something like that.
def python_binary
    if RUBY_PLATFORM =~ /(mswin|mingw|cygwin|bccwin)/
        return 'python'
    end
    @python_binary ||= begin
        `which python2`
        $?.success? ? "python2" : "python"
    end
end

这段文字的意思是:“根据这个页面,还有一些细节需要注意。”

另外:启用markdown:redcarpet将调用python执行一些脚本。当我禁用redcarpet时,甚至不需要安装python就可以运行jekyll。这是在Windows上运行jekyll的另一个原因。因此,另一个解决方案是使用jekyll 2.4默认设置的kramdown。 - chris Ren
那对我有用。if RUBY_PLATFORM =~ /(mswin|mingw|cygwin|bccwin)/ return 'python' end是额外的部分。 - Neo

1

对我来说,解决方法是添加一个名为python2.exe的符号链接到python.exe。

在安装了Python 2.x的目录中以提升的权限执行以下操作:

mklink python2.exe python.exe

1

补充一下@noobcode所说的,如果您将Python27目录(无论您将其存储在哪里)添加到路径中,实际上可以继续使用pygments.rb(正如另一个用户在上面的回复中提到的)。

那些不知道如何将目录添加到他们的PATH的人应该访问this site


1

1
我知道这个问题已经有答案了,但是我想分享一下我的经验。看起来问题出在ruby安装的pygments.rb上。在安装jekyll并尝试在本地主机上运行时,它会在默认的文章文件处报错。通过从markdown文件中删除语法高亮代码(如下所示),并从_config.yml文件中删除pygments的引用,我能够在本地主机上运行它。
{% highlight ruby %}
def print_hi(name) puts "Hi, #{name}" end print_hi('Tom') prints 'Hi, Tom' to STDOUT. {% endhighlight %}

删除划掉的行。

更改起作用了,但我还没有找到可能使用pygments.rb进行代码高亮的方法。


0

进入包含 python.exe 的目录,将其复制并粘贴到一个名为 python2.exe 的新文件中。问题解决!


0

仅供参考,对于那些遇到和我一样的问题的人。我先安装了Python 2.7.6,然后安装了Python 3.3.0。所以重新安装Python 2.7.6解决了我的问题。 pygments.rb(0.5.4) Python 2.7.6 ruby 1.8.7(2012-02-08 patchlevel 358)[universal-darwin12.0] jekyll 1.4.3 OSX 10.8.5


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接