如何为具有大型图像目录的博客设置Jekyll,以避免在生成的站点中复制该目录?

时间:2011-08-07 10:17:42

标签: jekyll

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

有没有办法,例如,将符号链接删除到站点目录中的images目录,然后可能让jekyll在生成静态文件时忽略它?

或者还有另一种方法可以解决这个问题吗?

4 个答案:

答案 0 :(得分:10)

假设您在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来构建站点。

  4. 由于图像目录名称以下划线开头,因此在构建期间,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)

  1. 为图片制作project page
  2. 设置目录结构

    /home/git/svnpenn.github.io
    /home/git/img
    
  3. 运行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
    
  4. 注意我使用的是因为我认为这有助于在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中详细介绍了它。