12

我正在考虑将 Jekyll 用于我正在整合的网站,该网站将是一个包含大量图像(和其他大型媒体文件)的博客。为图像创建一个目录并在帖子中根据需要链接到它们很容易。但是,据我了解,当站点生成时,所有图像数据都将复制到生成的包含静态文件的 _site 目录中。每次生成站点时,都会清空 _site 目录,并重新填充站点的静态版本。

有没有办法,例如,将符号链接拖放到站点目录中的图像目录,然后在生成静态文件时让 jekyll 忽略它?

还是有另一种更有意义的方法来解决这个问题?

4

4 回答 4

11

假设您在 apache Web 服务器上运行,您可以设置 Alias 指令以提供来自正常 docroot 之外的目录的图像。您需要访问编辑 VirtualHosts 配置或其他创建别名指令的能力(例如通过控制面板)。

举一个如何工作的例子,假设您将 jekyll 文件存储在名为“/web/jekyll”的目录下。要获取您的图像目录,请执行以下操作:

  1. 添加一个“_images”目录以及您的基本 jekyll 树。最终得到类似的东西:

    _config.yml
    _images/
    _layouts/
    _posts/
    _site/
    index.md
    
  2. 更新您的 apache 配置以添加 Alias 指令,例如:

    Alias /images /web/jekyll/_images
    
  3. 重新加载 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”提供的。从网站服务的角度来看,这种设置并没有真正的不同。我只是喜欢原始源文件、完全烘焙的输出文件和通过别名工作的图像之间更清晰的分离。

于 2011-08-08T16:57:42.090 回答
0
  1. 为图像制作一个项目页面
  2. 设置目录结构

    /home/git/svnpenn.github.io
    /home/git/img
    
  3. 运行杰基尔

    # 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 分钟才能发布,具体取决于服务器。

于 2012-03-12T18:50:39.123 回答
0

正确,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。

-担

于 2014-03-06T04:43:52.573 回答
0

我知道这已经得到了回答,但我走了一条稍微不同的路线。我将所有图像托管在 Dropbox 上的公共目录中,并使用 grunt 生成图像清单。它使我的存储库很小,因为图像没有被签入。我在一篇文中详细介绍了它。

于 2015-10-24T03:05:54.790 回答