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



我有一个运行Ubuntu的虚拟机。我配置了一个nsf共享(当我说我,有人帮了我,所以我对NFS共享不太了解),这样我就可以在我的Mac主机上工作,并使用它的工具,如Sublime Text。

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

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

编辑:

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

然后卸载Jekyll v1.4.2并安装Jekyll v1.2.1

为此,运行这些命令,

gem uninstall jekyll
y
gem install jekyll -v 1.2.1

不需要安装旧版本的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回购的一个相关问题中发现了这一点:

  • 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事件显然是处理问题的一种更优雅的方式,但我还是保持原样,没有遇到任何问题。

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

最新更新