【问题标题】:Is there any way to roll two paginated blogs into one Jekyll site, hosted in a single GitHub Pages repo?有没有办法将两个分页的博客放到一个 Jekyll 站点中,托管在一个 GitHub Pages 存储库中?
【发布时间】:2020-07-26 01:08:15
【问题描述】:

我有一个使用 jekyll-paginate 插件的 Jekyll 站点,由 GitHub Pages 托管,非常标准。

是否有人知道处理分页的其他解决方案,以便我可以从同一站点的域/blog1 和域/blog2 using this solution 构建两个博客,但也保留分页?

保留当前分页设计 不是优先事项。欢迎需要重新设计的创意。

我知道jekyll-paginate-multiple 存在,但 GitHub Pages 本身并不支持它,我必须维护两个 repos 来分别维护站点代码和构建工件,这并不理想。

【问题讨论】:

    标签: ruby configuration pagination jekyll


    【解决方案1】:

    将任何自定义插件/Gem 与托管在 Jekyll 博客的 GitHub 页面一起使用

    这是您可以在 GitHub Pages 托管网站上使用任何自定义插件的方法。我在自己的博客上使用它,所以我 100% 确定它有效。基本思想是,您使用 TravisCI 在 staging 分支上构建自定义 Jekyll 站点,然后自动将其推送到为您的网站提供服务的 GitHubPages master 分支。下面是快速演练:

    a) 您将 GitHub Pages 配置为从您的 master 分支的 docs 文件夹托管

    b) 你添加并配置一个 staging 分支作为你的 repo 的默认分支,在那里你可以做你所有的本地工作,通过在这个分支上设置一个 git 标签来发布工作

    c) 您使用_config.yml 文件将您的destination 目录设置为docs

    # _config.yml
    destination: docs
    

    d) 为避免 Travis CI 的构建问题,您可以将 Gemfile.lock 添加到您的 .gitignore 文件,并将 docs 文件夹添加到您的本地 .git/info/exclude,因为您不想再推送它们了。从本地推送中排除 docs 文件夹是可选的,但对我来说效果最好。您可能还需要先删除Gemfile.lock,然后让 Travis CI 为所选 Docker 操作系统选择合适的版本,否则您可能会遇到很难修复的版本冲突。

    e) 使用 Travis CI 部署到 production 又名您的实时站点,您可以添加 .travis.yml 文件:

    language: ruby
    rvm:
    - 2.6.3
    install:
      - bundle install
    script:
      - JEKYLL_ENV="production" bundle exec jekyll build
    deploy:
      provider: script
      script: bash script/deploy.sh
      skip_cleanup: true
      on:
        tags: true
        branch: staging
    
    branches:
      only:
        - staging
        - /\d+\.\d+(\.\d+)?(-\S*)?$/
    env:
      global:
      - NOKOGIRI_USE_SYSTEM_LIBRARIES=true
      - secure: TRAVIS_SECRET_KEY_FOR_GITHUB_CREDENTIALS
    sudo: false
    cache: bundler
    notifications:
      email: false
    

    g) script/deploy.sh 看起来有点像这样:

    #!/usr/bin/env bash
    
    bundle install
    JEKYLL_ENV="production" bundle exec jekyll build
    git status
    git add .
    git commit -m"[skip travis] Automated build"
    git remote set-url origin https://USERNAME:$PSW@github.com/YOUR_GIT_USER/YOUR_REPO.git
    git push origin HEAD:master --force
    

    e) 使用部署脚本中使用的 $PSW 变量在 .travis.yml 中获取加密的 TRAVIS_SECRET_KEY_FOR_GITHUB_CREDENTIALS,只需遵循 Encryption Key Doc

    完成此配置后,您可以像在 localhost 上一样使用任何 Gem,因为构建部分不再由 GitHub 完成,而是由 TravisCI 完成。

    结论

    您只需在 staging 上工作,只让 Travis CI 推送到您的主分支。您使用1.0.0 形式的标签进行部署。您现在需要做的就是将jekyll-paginate-multiple 添加到您的Gemfile_config.yml,然后您就准备好了。

    如果有人对这些步骤的更多详细信息感兴趣,请查看此Blog Post 详细说明问题

    【讨论】:

    • 对于我的简单博客,帖子不多,发帖频率低,我设计了解决这个问题的方法。我摆脱了分页,并在摘录最新的 3-5 之后放入帖子标题列表。但是当我最终成长到超越这一点时,我喜欢这个解决方案!
    【解决方案2】:

    如果 jekyll-paginate-multiple 在您的上下文中有效,您也可以在 GitHub 页面上使用它。

    你需要做的就是复制

    https://github.com/scandio/jekyll-paginate-multiple/blob/master/lib/jekyll-paginate-multiple.rb
    

    进入你的 repos _plugins 文件夹,你就可以开始了。

    【讨论】:

    • 你确定这有效吗? GH Pages documentation says 我不能使用第三方插件,但同时从未以某种方式提及 _plugins 目录的任何内容。快速编辑:是的,他们使用 --safe 标志构建,它禁用自定义插件。
    • Github 页面上允许的插件:pages.github.com/versions
    • 是的,很抱歉,因为我一开始没有测试它。我发布了第二个答案,但它概述了如何添加任何自定义 Gem/Plugin 以及托管 Jekyll 博客的 GitHub Pages,包括 jekyll-paginate-multiple
    猜你喜欢
    • 2015-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多