我正在考虑将 Jekyll 用于我正在整合的网站,该网站将是一个包含大量图像(和其他大型媒体文件)的博客。为图像创建一个目录并在帖子中根据需要链接到它们很容易。但是,据我了解,当站点生成时,所有图像数据都将复制到生成的包含静态文件的 _site 目录中。每次生成站点时,都会清空 _site 目录,并重新填充站点的静态版本。
有没有办法,例如,将符号链接拖放到站点目录中的图像目录,然后在生成静态文件时让 jekyll 忽略它?
还是有另一种更有意义的方法来解决这个问题?
我正在考虑将 Jekyll 用于我正在整合的网站,该网站将是一个包含大量图像(和其他大型媒体文件)的博客。为图像创建一个目录并在帖子中根据需要链接到它们很容易。但是,据我了解,当站点生成时,所有图像数据都将复制到生成的包含静态文件的 _site 目录中。每次生成站点时,都会清空 _site 目录,并重新填充站点的静态版本。
有没有办法,例如,将符号链接拖放到站点目录中的图像目录,然后在生成静态文件时让 jekyll 忽略它?
还是有另一种更有意义的方法来解决这个问题?
假设您在 apache Web 服务器上运行,您可以设置 Alias 指令以提供来自正常 docroot 之外的目录的图像。您需要访问编辑 VirtualHosts 配置或其他创建别名指令的能力(例如通过控制面板)。
举一个如何工作的例子,假设您将 jekyll 文件存储在名为“/web/jekyll”的目录下。要获取您的图像目录,请执行以下操作:
添加一个“_images”目录以及您的基本 jekyll 树。最终得到类似的东西:
_config.yml
_images/
_layouts/
_posts/
_site/
index.md
更新您的 apache 配置以添加 Alias 指令,例如:
Alias /images /web/jekyll/_images
重新加载 apache 配置并运行 jekyll 来构建站点。
由于图像目录名称以下划线开头,jekyll 不会在构建过程中将其推送/复制到输出 _site。Apache 会很乐意照常提供 _site 目录中的大多数文件,但是当它看到“http://jekyll/images/test.jpg”之类的内容时,而不是在“/web/jekyll/_site/_images/”下查找文件test.jpg”,它将从“/web/jekyll/_images/test.jpg”提供。
顺便说一句,我更喜欢源内容和输出内容的分离,而不是 jekyll 的默认设置。所以,我设置我的目录结构如下:
/web/jekyll/html/
/web/jekyll/images/
/web/jekyll/source/
/web/jekyll/source/_config.yml
/web/jekyll/source/_layouts
/web/jekyll/source/_posts
/web/jekyll/source/index.md
在 _config.yml 中设置了以下选项
destination: ../html
以及 apache 别名指令设置:
Alias /images /web/jekyll/images
Jekyll 在“/web/jekyll/source”目录中运行,但输出被发送到“/web/jekyll/html”目录。与第一个示例类似,对“http://jekyll/images/test.jpg”的调用是从“/web/jekyll/images/test.jpg”提供的。从网站服务的角度来看,这种设置并没有真正的不同。我只是喜欢原始源文件、完全烘焙的输出文件和通过别名工作的图像之间更清晰的分离。
设置目录结构
/home/git/svnpenn.github.io
/home/git/img
运行杰基尔
# We cant add the symlink until after jekyll is done. We will remove the
# site folder and wait for it to rebuild.
rm -r _site
jekyll --server &
while [ ! -f _site/index.html ]
do
sleep 1
done
ln -s ../images _site/images
注意我使用它是因为我认为它有助于在 GitHub 页面上发布时间。它不是。GitHub 可能需要 1-10 分钟才能发布,具体取决于服务器。
正确,jekyll 命令的第一部分删除了目标目录中的所有内容。问题在于必须再次手动创建符号链接。所以接下来,继续创建一个每次都执行此操作的脚本。
请确保:
exclude: _config.yml 文件中的 [jekyll, css, img]
linux: ";" 符号运行第一,第二,第三......命令。
脚本:一个名为 jekyll 的文件,具有可执行权限,包含
jekyll;
ln -s /var/www/css /var/www/_site/css;
ln -s /var/www/img /var/www/_site/img;
最后运行(./jekyll)该程序而不是 jekyll。
-担
我知道这已经得到了回答,但我走了一条稍微不同的路线。我将所有图像托管在 Dropbox 上的公共目录中,并使用 grunt 生成图像清单。它使我的存储库很小,因为图像没有被签入。我在一篇博文中详细介绍了它。