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

我如何为一个具有大图像目录的博客设置Jekyll,以避免在生成的站点中复制该目录?,jekyll,Jekyll,我正在考虑将Jekyll打造成一个包含大量图片(和其他大型媒体文件)的博客网站。为图片创建一个目录,然后根据需要在文章中链接到它们,这很容易。但是,据我所知,当生成站点时,所有图像数据都将复制到包含静态文件的生成站点目录中。每次生成站点时,都会清空_站点目录,并重新填充站点的静态版本 例如,有没有办法将一个符号链接放到站点目录中的images目录中,然后让jekyll在生成静态文件时忽略它 还是有其他更合理的方法 假设您在apache web服务器上运行,您可以设置Alias指令,以从普通doc

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

例如,有没有办法将一个符号链接放到站点目录中的images目录中,然后让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在生成期间不会将其推送/复制到输出站点。Apache很乐意像平常一样为您的_站点目录中的大多数文件提供服务,但当它看到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指令设置,包括:

    Alias /images /web/jekyll/images
    
    Jekyll在“/web/Jekyll/source”目录中运行,但输出被发送到“/web/Jekyll/html”目录。与第一个示例类似,调用“http://jekyll/images/test.jpg“由“/web/jekyll/images/test.jpg”提供”。从站点服务的角度来看,这种设置并没有真正的区别。我喜欢原始源文件、完全烘焙的输出文件和通过alias工作的图像之间的清晰分离

  • 为这些图像做一个简单的描述
  • 设置目录结构

    /home/git/svnpenn.github.io
    /home/git/img
    
  • 跑吧,杰基尔

    #在jekyll完成之前,我们无法添加符号链接。我们将删除
    #站点文件夹,并等待其重建。
    rm-r_站点
    杰基尔——服务器&
    而[!-f_site/index.html]
    做
    睡眠1
    完成
    ln-s../images\u站点/图像
    
  • 注意我之所以使用它,是因为我认为它有助于在GitHub上发布时间 页。事实并非如此。GitHub发布可能需要1-10分钟,具体时间取决于
    服务器。

    正确,jekyll命令的第一部分删除目标目录中的所有内容。问题是必须再次手动创建符号链接。接下来,继续创建一个脚本,每次都这样做

    确保:

    在_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生成图像清单。它使我的存储库变小,因为图像不会被签入。我在一篇文章中对此进行了详细介绍。

    我可以看出这是如何工作的,但我应该提到,我真的希望映像目录位于_sites目录中,因为这样可以简化将整个内容同步到服务器的过程。有进一步的见解吗?(顺便说一句,谢谢你提供的关于网站结构的建议。我很感谢你抽出时间。)我现在不知道还能怎么做。关于rsync的一个注意事项是,在更新结构的第二个示例中,我们的想法是将“/web/jekyll/”中的所有内容rsync到您的服务器。“html”和“images”目录实际上会被使用,“source”目录只会为您提供代码的异地备份。您需要小心使用jekyll输出到的任何地方的符号链接。如果您的代码允许符号链接存在,但在升级过程中被破坏,那么jekyll可能会删除您的所有源图像。哇,这真是太棒了,跳出框框思考解决方案!