我正在考虑将Jekyll用于我正在整理的网站,这将是一个包含大量图片(以及其他大型媒体文件)的博客。为图像创建一个目录很简单,然后根据需要在帖子中链接到它们。但是,据我所知,当生成站点时,所有图像数据将被复制到生成的_site目录中,该目录包含静态文件。每次生成站点时,都会清空_site目录,并使用站点的静态版本重新填充。
有没有办法,例如,将符号链接删除到站点目录中的images目录,然后可能让jekyll在生成静态文件时忽略它?
或者还有另一种方法可以解决这个问题吗?
答案 0 :(得分:10)
假设您在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”目录。与第一个示例类似,从“/web/jekyll/images/test.jpg”提供对“http://jekyll/images/test.jpg”的调用。从站点服务的角度来看,此设置并没有真正有所作为。我只是喜欢原始源文件,完全烘焙的输出文件和通过别名工作的图像之间更清晰的分离。
答案 1 :(得分:0)
设置目录结构
/home/git/svnpenn.github.io
/home/git/img
运行Jekyll
# 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分钟才能发布,具体取决于 服务器
答案 2 :(得分:0)
正确,jekyll命令的第一部分删除目标目录中的所有内容。问题是必须再次手动创建符号链接。接下来,继续创建一个每次执行此操作的脚本。
请确保:
排除:_config.yml文件中的[jekyll,css,img]
linux:“;”符号运行第一,第二,第三..命令。
script:一个名为jekyll的文件,包含
的可执行权限 jekyll;
ln -s /var/www/css /var/www/_site/css;
ln -s /var/www/img /var/www/_site/img;
最后运行(./jekyll)该程序而不是jekyll。
-Dan
答案 3 :(得分:0)
我知道这已经得到了解答,但我的路线略有不同。我将所有图像托管在Dropbox的公共目录中,并使用grunt生成图像清单。它使我的存储库变小,因为图像没有被检入。我在blog post中详细介绍了它。