Jekyll 添加 jekyll-archives 插件解决 tags category 相关问题

我加了 jekyll-archives 插件重写了blog的一些页面逻辑。稍微记录一下。

官方地址: https://github.com/jekyll/jekyll-archives

Mac安装

  1. 在 Gemfile 中增加 gem 'jekyll-archives'
  2. _config.yml 中增加:

     plugins:
       - jekyll-archives
    

    更多配置参考 https://github.com/jekyll/jekyll-archives/blob/master/docs/configuration.md

    以下是我的配置(我的layout文件是 tags.html):

     # Build settings
     plugins:
       - jekyll-paginate
       - jekyll-archives
        
     jekyll-archives:
       enabled:
         - tags
         - categories
         - year
       layouts:
         tag: tags
         category: category
         year: year
       permalinks:
         tag: '/tags/:name.html'
         category: '/:name/'
         year: '/archives/:year.html'
    
  3. 安装

     bundle install
    

    image-20240105上午100158848

Linux安装

基于以前的文章《使用新版本的 jekyll,加快编译速度》,我重build了镜像。你可以直接使用我的镜像:

docker pull kelvinblood/jekyll:v4.2.2

这里简述我的构建过程。官方原始的镜像在这,我用了 v4.2.2。

# File: Dockerfile
FROM jekyll/jekyll:4.2.2
MAINTAINER admin@kelu.org

# Install Gems
RUN gem install \
  jekyll-archives

我build成了这个名字:

# File: build.sh
docker build -t kelvinblood/jekyll:v4.2.2 .

修改docker-compose.yml:

# File: docker-compose.yml
version: '3.2'

services:
  blog:
    image: kelvinblood/jekyll:v4.2.2
    command: jekyll s
    network_mode: bridge
    container_name: blog
    restart: "no"
    volumes:
      - ./:/srv/jekyll
    environment:
      JEKYLL_UID: 1000
      JEKYLL_GID: 1000
      JEKYLL_ENV: production

参考资料


Mac 10.15 catalina 安装docker 记录

背景

老电脑,发挥一下预热。

但是直接使用 brew install 或者 去官网下载都不OK了。因为苹果官方已经放弃支持 10.15 catalina 了,上下游也不支持了。

除了 docker desktop,也有第三方的 docker 软件,比如 limaorbstack,也是不支持Mac老系统,😮‍💨。

根据 stackoverflow: Install docker on macos catalina 的提示,直接下载老版本的docker desktop即可:

我下载了 x86 的做个备份

安装后可以用.

image-20240102170633951

image-20240102170641362


苹果开发者账号添加团队成员

背景

近期在处理苹果开发账号相关的事情,包括添加团队成员、创建使用证书、编译打包、真机测试安装、提交审核上架等。

目前是公司内部团队进行开发,账号类型为公司账号,添加一个团队成员协同开发。

苹果开发者账号下的团队成员有三种角色:

  • Team Agent (代理) 就是申请注册开发者账号的那一个,权限最高,续费和创建开发商证书只能使用该账号。
  • Admin (管理) 管理分发证书、管理测试设备、管理应用配置等等。
  • Member (成员) 没有管理权限,只能下载和请求数据,只能做开发过程中真机调试。

官方帮助:https://developer.apple.com/cn/help/account/manage-your-team/invite-team-members/

步骤

  1. appstore connect

    image-20231229161007400

  2. 邀请

    注意要选择可以访问 访问证书、标识符和描述文件,不过 云端管理的分发证书这个看情况。

    image-20231229161053322


mac 下使用 homebrew 安装 chrome

真是一波三折血泪史。

起因是要装 chromedriver,先看了官方的地址:https://chromedriver.chromium.org/downloads

怎么回事,不能装最新的,只能装114版本?

image-20231228203906566

看样子 homebrew 的版本没有114的,还是用老一点的chrome版本,才能和官方稳定的 chromedriver 搭配干活。

brew info --cask google-chrome
brew install --cask google-chrome@114

image-20231228175313073

完了,homebrew没有这个版本。网上乱七八糟的不放心,还是找比较像官方的:

image-20231228175117088

下载下来发现用不了,无法运行。

image-20231228204036638

算了,直接源码编译:https://chromium.googlesource.com/chromium/src/+refs

我用了114版本:https://chromium.googlesource.com/chromium/src/+/refs/tags/114.0.5735.346

放弃,怎么可能自己编译?!

telegram-cloud-photo-size-5-6084706307870407256-y

又认真看了下,120和对应的chromedriver,这不是有吗?https://googlechromelabs.github.io/chrome-for-testing/

image-20231228204117384

image-20231228204355700

下载好了还是无法运行,心累了。

image-20231228205028976

死马当活马医吧,用 homebrew 把 chrome 和 chromedriver 都装完:

image-20231228205353704

试着跑一下 selenium-server 看:

image-20231228205951471

没问题。用代码跑看也是OK的。写了个简单的动态加载另一个python文件的方法,适合debug。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains
import time
import os
import subprocess
import random
import importlib

USERNAME=""
PASSWORD=""
WEBSITE="http://abc.com"
driver = webdriver.Chrome()
module_name = "oaread"
oaread_module = importlib.import_module(module_name)

def main():
    global WEBSITE
    global driver

    driver.get(WEBSITE)

    print('Enter ' + driver.title)
    # time.sleep(random.randint(4,9))
    username_xpath = '//input[contains(@id,"userName")]'
    password_xpath = '//input[contains(@id,"password")]'
    login_button_xpath = '//*[@id="main"]/table/tbody/tr/td/div[2]/div/login-tab/div/div[2]/div[2]/div[1]'

    try:
        username_elem = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.XPATH, username_xpath))
        )
                # 输入用户名
        username_elem.send_keys(USERNAME)
        # print(username_elem.get_attribute('outerHTML'))

        # 等待密码输入框可见
        password_elem = WebDriverWait(driver, 10).until(
            EC.visibility_of_element_located((By.XPATH, password_xpath))
        )

        # 输入密码
        password_elem.send_keys(PASSWORD)
        # print(password_elem.get_attribute('outerHTML'))

        # 添加等待时间,模拟人为操作的速度
        time.sleep(1)
        # 等待登录按钮可见
        login_button_elem = WebDriverWait(driver, 10).until(
            EC.visibility_of_element_located((By.XPATH, login_button_xpath))
        )

        # 点击登录按钮
        login_button_elem.click()
        step_enter_oaread(driver)

    except Exception as e:
        print(e)

    # step_oa_read(driver)
    monitor_and_execute(module_name+".py", driver)

def get_file_modification_time(file_path):
    """
    获取文件的修改时间
    """
    return os.path.getmtime(file_path)

def monitor_and_execute(script_path, driver):
    """
    监控文件是否有更新,如果有更新则执行脚本
    """
    last_modification_time = get_file_modification_time(script_path)

    while True:
        current_modification_time = get_file_modification_time(script_path)

        if current_modification_time > last_modification_time:
            print("File has been updated. Executing the script.")
            last_modification_time = current_modification_time
            importlib.reload(oaread_module)
            try:
                oaread_module.my_run(driver)
            except Exception as e:
                print("执行出错,不管了")
                print(e)
            print("sleep 1")
            time.sleep(1)

def step_oa_read(driver):
    errCount = 10
    while errCount > 0:
        try:
            oaread_module.step_first_item(driver)
            time.sleep(random.randint(2,4))
            oaread_module.step_item_replay(driver)
        except Exception as e:
            errCount -= 1
            print(e)
            print("执行出错,不管了")
            time.sleep(random.randint(10,20))
        time.sleep(random.randint(1,2))
        oaread_module.my_first_window(driver)

def step_enter_oaread(driver):
    driver.get('http://abc.com)

if __name__=="__main__":
    errCount = 10
    while errCount > 0:
        errCount -= 1
        main()

image-20231229160614810


mac 快速使用 nginx

安装

brew install nginx

image-20231226085242585

配置文件

/opt/homebrew/etc/nginx/nginx.conf

配置设置和常用的nginx是一样的。默认的目录和文件:

brew info nginx

image-20231226100551078

虽然 homebrew 已经安装nginx成功了。但是 nginx并未被正确安装到Homebrew的默认目录,brew services 可能无法找到正确的安装路径而报错。

image-20231226100814580

常用命令

image-20231226102045020

brew services reload nginx
brew services start nginx
brew services stop nginx

image-20231226102556460

image-20231226102150606

针对 Jekyll 和 markdown 的配置优化

对于本地的一些临时目录里的图片,如果按照正常的nginx请求,是进不来的。这里就要对404的请求做二次改正,这里是我最终的配置:

image-20240110下午44206031

主要思路是

  • 将匹配类似 /category/2024/01/10/ 的路径段,并将其从 URI 中去掉。
  • 然后,root $new_root; 将新的 root 路径设置为 /Users/kelu/Workspace/blog/_posts
  • 接着使用 try_files $uri =404; 尝试访问文件。

这样,对于 Typora 等 markdown 工具,自动将图片以相对目录的方式保存下来,也可以展示在 网站上。

    root /Users/kelu/Workspace/blog/_site;
    index index.html;

    location / {
        try_files $uri $uri/ @fallback;
    }

    location @fallback {
        # 设置新的root路径
        set $new_root /Users/kelu/Workspace/blog/_posts;

        # 使用正则表达式捕获组提取除了特定字符串之外的路径
        rewrite ^/([^/]+/[^/]+/[^/]+/[^/]+)/(.*)$ /$2 break;

        # 尝试访问新的root路径
        root $new_root;
        try_files $uri =404;
    }

参考资料


mac 命令行使用 vscode 打开当前目录

  1. 安装命令行工具: 打开 VSCode,然后按 Cmd + Shift + P 打开命令面板,输入 “shell command” 并选择 “Shell Command: Install ‘code’ command in PATH”。这将会在命令行中添加 code 命令。

    image-20231214171531639

    image-20231214171543081

  2. 使用 code 命令打开目录: 在目标目录中,运行以下命令:

    bashCopy code
    code .
    

    image-20231214171614210