Jekyll --watch命令无法在共享文件夹(nfs)中使用虚拟机Ubuntu来宾机的Mac主机

时间:2014-01-14 21:08:48

标签: ubuntu virtualbox jekyll nfs watch

我有一个运行Ubuntu的Virtual Box VM。我已经配置了一个nsf共享(当我说我,有人帮助我,所以我不太熟悉NFS共享),这样我就可以在我的Mac主机上工作并使用它的工具,如Sublime Text。

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

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

修改

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

3 个答案:

答案 0 :(得分:2)

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

为此,请运行这些命令,

gem uninstall jekyll
y
gem install jekyll -v 1.2.1

答案 1 :(得分:0)

无需安装较旧版本的jekyll - 您需要使用--force_polling。说明如下:

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

默认情况下,版本1.2.1的jekyll会轮询目录以进行更改,但它已经改变了它侦听修改的方式,显然是使用inotify事件,这样做效果更好。这个 会破坏对共享文件夹的监听,但在使用--force_polling--watch时,可以使用build选项和serve强制旧行为:

jekyll serve --watch --force_polling

我在jekyll的回购中找到了相关问题:

更新:我现在开始通过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事件是处理问题的更优雅方式。

答案 2 :(得分:-1)

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