Frog

/ 教程, racket

更新于:2020–04–12

在我之前写《一次博客的洗礼》的时候,我已经将我原本使用jekyll搭建的博客迁移到了使用Frog搭建的新博客之上。期间曾为了自己博客的某种特定文章格式,写过一个插件scribble-frog-helper。现如今,因为某种原因,打算以private仓库的方式来提供我博客的对外访问服务,所以使用了heroku来完成的。

本地在写文章的时候,raco frog -wbpV组合会显得非常有用,可以动态的预览文章效果。

Github目前虽然可以免费创建Private类型的仓库,但却不支持此类仓库对外免费提供Github Pages。所以我不能再免费使用Github Page来运行博客了。此时我能想到的方案是把自己的博客放在Heroku创建的免费应用上。(2022年新增:其实也不必一定使用heroku,可以新建一个private的repo,用github action在push的时候,自动生成静态文件,再自动把这些静态文件推送到比如https://github.com/yanyingwang/yanyingwang.github.io的public的repo上。这样,就完成了闭源式的使用github搭建自己的博客了。)

其实如果不在意自己网站的源码的话,大可以像我之前那样,使用Github Action的setup-racketghaction-github-pages来搞定:把source分支作为代码分支,把master分支作为编译之后的静态文件分支,然后把一些静态文件或者css和js文件等全部都放在public目录下,包括favicon.ico文件等,再配置github action在push的时候自动安装racket和frog的环境,自动运行raco frog -Vb命令把source分支的文章源代码编译生成的public目录的静态文件都push到master分支。例如,我的Github Action配置文件是这样的:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
name: main
on:
  push:
    branches:
      - "source"
jobs:
  main:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        racket-version: [ "7.5" ]
        racket-variant: [ "regular" ]
    name: main
    steps:
      - uses: actions/checkout@master
      - uses: Bogdanp/setup-racket@v0.5
        with:
          architecture: x64
          distribution: full # or minimal
          variant: ${{ matrix.racket-variant }}
          version: ${{ matrix.racket-version }}
      # - name:  install sys pkg
      #   run: |
      #     sudo apt-get update && apt-get install -y python-pygments
      - name: install deps
        run: |
          raco pkg install --auto frog
xb          # raco pkg install --auto scribble-frog-helper ## it was a private repo now
      - name: build public
        run: |
          raco frog -Vb
      - name: deploy to master
        if: success()
        uses: crazy-max/ghaction-github-pages@v1.2.5
        with:
          target_branch: master
          build_dir: public
          fqdn: yanying.wang
        env:
          GITHUB_PAT: ${{ secrets.GITHUB_PAT }}

但如果私有化了仓库,使用Heroku来提供网站服务,则需要在Heroku中创建一个应用,链接上例如使用上面讲的配置好Github Action的仓库,在之基础上再配合使用heroku-buildpack-static来把Github Action自动编译生成的在master分支的静态文件自动发布到Heroku中,只需要在public目录添加一个static.json文件即可。

另外知道.gitignore如何写能忽略一个目录或文件和只包含某一个目录中的特定文件会很有用,例如我的是这样的:

1
2
3
4
5
6
7
8
9
.frog/*
public/*

!public/favicon.ico
!public/css
!public/js
!public/README.md
!public/CNAME
!public/static.json

其中!开头表示不被git忽略的文件。

不过其实,你可以跳过Github Action的过程,因为Heroku中有非官方作者写的Racket语言的buildpack:https://elements.heroku.com/buildpacks/lexi-lambda/heroku-buildpack-racket