博文上次更新时间
2025-09-28 14:54:31
创建Action流以实现githubPage上插件的正常运行
摘要:实现插件在GithubPage上的正常部署。
Test Jekyll-last-modified-at
插件
Post last updated at 2025-09-28 14:54:31
正文部分
问题发现
在正常情况下,我们新增的插件会随着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
了。 - 经过验证,插件生效且正确。