摘要:实现插件在GithubPage上的正常部署。

Test Jekyll-last-modified-at 插件

Post last updated at 2025-09-28 14:54:31


正文部分

问题发现

在正常情况下,我们新增的插件会随着bundle exec jekyll serve正常显示在本地服务器。但是当页面上传到Github-Page时,插件就无法正常工作了。经过研究,事实上是Github默认的Jekyll版本比较落后导致的。

问题解决

  1. SettingsPages内将之前设置的source源改为Github Actions,选择Jekyll生成特定路径workflowsjekyll.yml并保存和提交更改。
  2. 过一会发现Action流出错,检查错误后发现是Setup Ruby部分出错,报错信息为:Error: The process '/opt/hostedtoolcache/Ruby/3.1.4/x64/bin/bundle' failed with exit code 16
  3. 所以更改一下jekyll.yml文件中的Setup Ruby部分为:

    - name: Setup Ruby
         uses: ruby/setup-ruby@v1 # v1
         with:
             ruby-version: '3.1' # Not needed with a .ruby-version file
    

    注意缩进。这里修改了@后面的内容为v1,之前的代码代表根据用户配置改变,可能会导致一些bug,如之前的报错(虽然也有bundle没有正确install的原因在)。这里的@v1表示根据最新Ruby进行Setup,更有稳定性,但是需要自己维护好自己的Ruby版本以及本地代码。

  4. 除此之外,添加新的name以及操作在Setup Ruby之后:

    - name: Cache bundle
         uses: actions/cache@v3
         with:
             path: vendor/bundle
             key: ${{ runner.os }}-bundle-${{ hashFiles('**/Gemfile.lock') }}
             restore-keys: |
               ${{ runner.os }}-bundle-
        
     - name: Install Bundler
         run: gem install bundler
        
     - name: Configure bundler path
         run: bundle config set path 'vendor/bundle'
          
     - name: Install dependencies
         run: bundle install
    

    同样注意缩进。这些的作用是安装Gem以及Bundle,同时缓存一下install的结果到指定路径,这样在更新页面时action不会一直重新下载gem,而是根据缓存内容动态下载。

  5. 修改完commit后发现,虽然插件可以使用,但是时间的更新不对,每次更新都随着整个网站的改变而改变,然而我们需要的是某个页面的更新时间。

    检查后发现,修改jekyll.yml- name: Checkout部分的内容为:

    - name: Checkout
         uses: actions/checkout@v4
         with:
           fetch-depth: 0  # Ensure the entire history is fetched for `jekyll-last-modified-at`
    

    这里设置了fetch-depth0,保证每一次提交历史都被遍历,这样就可以正确更新last-modified-at了。

  6. 经过验证,插件生效且正确。