博文上次更新时间
2025-12-22 18:08:57
创建Action流以实现githubPage上插件的正常运行
摘要:实现插件在GithubPage上的正常部署。
Test Jekyll-last-modified-at 插件
Post last updated at 2025-12-22 18:08:57
正文部分
问题发现
在正常情况下,我们新增的插件会随着bundle exec jekyll serve正常显示在本地服务器。但是当页面上传到Github-Page时,插件就无法正常工作了。经过研究,事实上是Github默认的Jekyll版本比较落后导致的。
问题解决
- 在
Settings的Pages内将之前设置的source源改为Github Actions,选择Jekyll生成特定路径workflows的jekyll.yml并保存和提交更改。 - 过一会发现
Action流出错,检查错误后发现是Setup Ruby部分出错,报错信息为:Error: The process '/opt/hostedtoolcache/Ruby/3.1.4/x64/bin/bundle' failed with exit code 16。 -
所以更改一下
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版本以及本地代码。 -
除此之外,添加新的
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,而是根据缓存内容动态下载。 -
修改完
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-depth为0,保证每一次提交历史都被遍历,这样就可以正确更新last-modified-at了。 - 经过验证,插件生效且正确。