Jekyll --watch 命令在共享文件夹 (nfs) Mac 主机中不起作用,使用 Virtual box Ubuntu 来宾机器

Posted

技术标签:

【中文标题】Jekyll --watch 命令在共享文件夹 (nfs) Mac 主机中不起作用,使用 Virtual box Ubuntu 来宾机器【英文标题】:Jekyll --watch command not working in shared folder (nfs) Mac host machine using Virtual box Ubuntu guest machine 【发布时间】:2014-01-14 21:08:47 【问题描述】:

我有一个运行 Ubuntu 的 Virtual Box VM。我已经配置了一个 nsf 共享(当我说我时,有人帮助了我,所以我对 NFS 共享不是很了解),以便我可以在我的 Mac 主机上工作并使用它的工具,例如 Sublime Text。

但是,当我运行以下命令时:jekyll serve --watch

当我更改代码时,网站不会自动重新生成。所以目前我必须停止服务器并再次运行命令。

编辑:

此外,如果我在 nfs 共享之外创建一个 jekyll 站点,它也可以正常工作。只是来宾机器上的标准普通文件夹。

【问题讨论】:

你运行的是什么版本的 jekyll?运行jekyll -v查看。 我发现了这个,四处寻找:github.com/jekyll/jekyll/issues/1763 - 似乎在jekyll 1.2.1 之后,您只需要对 VirtualBox 使用强制轮询(添加--force_polling),因为不会发送inotify 事件共享文件夹(如预期)所以jekyll 必须手动轮询文件。显然jekyll 过去默认强制轮询到 1.2.1,后来更改了。 【参考方案1】:

然后卸载 Jekyll v 1.4.2 并安装 Jekyll v 1.2.1

为此,请运行这些命令,

gem uninstall jekyll
y
gem install jekyll -v 1.2.1

【讨论】:

【参考方案2】:

无需安装旧版本的 jekyll - 您需要使用 --force_polling。解释如下:

VirtualBox 不会将共享文件夹的inotify 事件发送给来宾。这是故意的:

https://www.virtualbox.org/ticket/10660

jekyll 到 1.2.1 版本默认会轮询目录以进行更改,但它已经改变了监听修改的方式,显然是使用 inotify 事件,这样效果更好。虽然这确实会中断对共享文件夹的侦听,但是在使用buildserve 时,可以使用--force_polling 选项和--watch 强制旧行为:

jekyll serve --watch --force_polling

我从 jekyll 的 repo 上的一个相关问题中发现了这一点:

https://github.com/jekyll/jekyll/issues/1763

更新:我现在自己开始通过 VirtualBox 使用 jekyll,发现 jekyll 通过共享文件夹观看文件有时会出现一个小问题:它读取文件修改错误,导致文件应该不加修改地复制到生成的站点,与其以前的版本相同,除了最后有垃圾回车(是的,即使文件格式设置为 unix 行结尾)。要解决此问题,您可以使用 rsync 将文件复制到虚拟硬盘驱动器并让 jekyll 监视该目录:

rsync -a --recursive --delete /source/directory/ /target/directory/inside/vm/

为了保持自动化,您可以将上述内容转换为脚本(或不转换)并使用watch

watch -n1 /path/to/rsync/script.sh

然后让 jekyll 监视目标目录,它工作正常。如果你这样做,--force_polling 不应该是必要的,除非你的虚拟化操作系统没有使用inotify 事件。我保持原样,没有任何问题,尽管显然inotify 事件是一种更优雅的处理问题的方式。

【讨论】:

这是 force_polling 不是 force-polling @Emad 没错,已更正。在我开始以这种方式使用 jekyll 之前写了这篇文章:P【参考方案3】:

更新到最新版本的 Jekyll,或至少更新到 Jekyll v 1.2.1

【讨论】:

我目前使用的是 1.4.2

以上是关于Jekyll --watch 命令在共享文件夹 (nfs) Mac 主机中不起作用,使用 Virtual box Ubuntu 来宾机器的主要内容,如果未能解决你的问题,请参考以下文章

如何在本地部署包含 css、js 和背景图像的 jekyll 站点?

在 macOS Sierra 上安装 jekyll 失败

在 Apple Watch 和 iPhone 之间使用 WCSession 共享数据

watch命令

linux常用命令:watch 命令

linux命令大全之watch命令详解(监测命令运行结果)