【问题标题】:Jekyll regeneration doesn't work inside VagrantJekyll 再生在 Vagrant 中不起作用
【发布时间】:2013-11-06 20:38:28
【问题描述】:

运行其他有效的命令:

jekyll serve --watch

除非我重新启动 jekyll 服务器,否则 Vagrant 内部不会导致文件重新生成。我在 Windows 上编辑。这是 Jekyll 在 Vagrant 中运行的问题,还是我需要做一些配置才能使其工作?我什至尝试使用具有以下 Procfile 配置的工头,但结果相同

web: jekyll serve --watch

【问题讨论】:

  • 您使用的是什么版本的 jekyll?你是如何安装 Ruby(rvm、rbenv、distro 包等)的,你是从 gh-pages/bundle install 安装 jekyll,还是作为手册安装 gem install jekyll
  • 对于那里的读者,在撰写本文时(2014 年 5 月 24 日),@egezer 给出了比已接受的问题更好的答案。
  • 您介意切换接受的答案吗? @egezer 的回答现在实际上回答了这个问题。

标签: vagrant jekyll


【解决方案1】:

它在最新的预发行版中实现(截至撰写本文时为 jekyll 2.0.0.alpha.3)。

您应该使用 --force_polling 选项来获得好处。

尝试像这样运行 jekyll 服务器:

jekyll serve --watch --force_polling

【讨论】:

  • 现在可以在最新的稳定版本中使用(截至撰写本文时为 jekyll-2.0.3)。谢谢!
  • jekyll build --watch 对我不起作用...所以我尝试了您的解决方案,它起作用了! :) 谢谢!
  • 嗯.. 试过这个,看起来它会工作。 jekyll 控制台说它正在重新生成我修改的 1 个文件,但只是第一次。并且这些更改并未反映在浏览器中。
【解决方案2】:

根据我自己对这个问题的经验,我的猜测是,您正在 /vagrant 文件夹中运行您的 jekyll 站点,该文件夹将 vagrant 映射/同步回主机操作系统。

这些映射或同步的文件夹正在使用某种疯狂的文件系统驱动程序(基本上是一种网络共享),文件监视功能在它们上不起作用。

This SO question 表现出同样的症状。

(你会明白我的意思是你在 `/vagrant' 之外运行你的 jekyll 站点,就像在主文件夹中一样。进行更改(使用 nano),你会看到 Regeneration 触发)

【讨论】:

  • 是的,但是把它放在 /vagrant 目录之外有点违背了使用 Vagrant 的目的。我个人使用它来将构建盒(vm)与我的日常机器隔离,但我仍然想利用主机编辑器的便利。另外,为了让它更令人沮丧,这曾经奏效。然后我更新了 VirtualBox。 :(
  • 就我个人而言,我开始认为像一个带有 jekyll 的 docker 容器是这种分离的(未来)方式。不过,主机操作系统的限制有点限制。
  • 我在 Windows 文件系统中使用 jeykill 的 repo 遇到了这种情况,但尝试在 Mac OS localhost 中运行该站点。 Parallels Desktop 肯定把事情搞砸了。
【解决方案3】:

您使用的是什么提供商?我能够使用 Virtual Box 作为提供程序并使用 Ubuntu 12.04 作为来宾操作系统,使其在 Windows 8 上运行。我必须使用 1.2.1 版本,而不是最新版本。

当我使用最新的 Jekyll 版本 (1.4.2) 时,watch 无法按预期工作(它不会注意到文件更改并且不会重建)。当我在来宾操作系统上编辑它们时它确实有效(它确实注意到文件更改并将重建)。

版本 1.2.1 无论文件是从哪里编辑的(来宾操作系统或主机操作系统)都可以工作。

为了恢复到版本 1.2.1,我运行了以下命令:

gem uninstall jekyll
gem install jekyll -v 1.2.1

注意:jekyll 站点是从 vagrant 目录运行的

【讨论】:

  • 只是评论说 Jake 的解决方案有效。对于遇到这篇文章的其他人:如果您使用 Github Pages,请注意 github-pages 依赖于 Jekyll 1.4.3,因此通过降级您确实会发现您的构建环境与他们的构建环境之间的不一致。 The bug report 表示问题出在 Jekyll 的 Listen dependency 上,他似乎正在修复它。
  • 优秀的答案杰克!这解决了 OP 描述的问题。
  • 在撰写本文时,在最新的稳定版本(jekyll-2.0.3)中,@egezer 回答解决了 OP 描述的问题
【解决方案4】:

在 vagrant 中,只要加上 --force_polling,那么 jekyll 就会监视除了 "_config.yml" 之外的几乎所有文件

jekyll serve --force_polling

当您更改“_config.yml”以外的其他文件时,您将看到重新生成。

但如果你更改“_config.yml”,它不会触发重新生成。

你在修改“_config.yml”时是否排除了重新生成?

【讨论】:

  • 能否请您详细说明您的答案,添加更多关于您提供的解决方案的描述?
  • 对不起我的英语不好,不过我已经升级了。
【解决方案5】:

我的猜测(不知道细节)是你需要无头运行,如:

jekyll serve -w --detach

jekyll documentation 中所述。如果不是这样,请更详细地描述该问题,正如我在评论中所问的那样。此外,您是否在 Vagrant 中使用任何类型的配置器,例如shell、chef、ansible 等?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-07
    相关资源
    最近更新 更多