Gitlab CI部署Hakyll博客时Pandoc区域设置/编码异常问题
解决GitLab Pages自动部署Hakyll博客的编码与文件缺失问题
这个错误的根源是pandoc-citeproc在读取系统编码环境变量时出了问题——它本该根据你设置的en_CA.UTF-8匹配对应的locale文件,但因为环境变量设置方式不对或者locale本身不存在,导致它生成了一个不存在的locales-C-.xml文件名,最终抛出找不到文件的错误。
下面是具体的解决步骤:
1. 正确导出编码环境变量
你当前的.gitlab-ci.yaml里只是声明了变量,但没有用export命令把变量导出到环境中,导致pandoc-citeproc根本读不到这个设置。修改后的配置应该是:
image: fpco/stack-build:lts-8.14 before_script: - export LC_ALL=en_CA.UTF-8 - export LANG=en_CA.UTF-8 # 这里可以补充你原本的其他前置步骤,比如 stack setup、stack build 等
2. 确保目标locale存在于镜像中
有时候fpco/stack-build:lts-8.14镜像里可能没有预装en_CA.UTF-8这个locale,这时候可以先安装locale生成工具并生成目标locale:
image: fpco/stack-build:lts-8.14 before_script: - apt-get update && apt-get install -y locales - locale-gen en_CA.UTF-8 - export LC_ALL=en_CA.UTF-8 - export LANG=en_CA.UTF-8
如果还是有问题,可以换成镜像里肯定存在的en_US.UTF-8试试。
3. 在Hakyll构建中强制指定locale
如果上面的方法都不生效,你可以在Hakyll的代码里调用pandoc时,明确指定locale参数,直接告诉pandoc-citeproc使用哪个locale,避免它依赖系统环境变量:
比如在你的Hakyll配置中,修改pandoc的编译选项:
pandocCompilerWith defaultHakyllReaderOptions defaultHakyllWriterOptions { writerExtensions = writerExtensions defaultHakyllWriterOptions <> extensionsFromList [Ext_citeproc], writerCiteproc = True, writerLocale = Just "en-CA" }
这样就能绕过系统环境变量的问题,直接让pandoc-citeproc找到正确的locale文件。
内容的提问来源于stack exchange,提问作者Joey Eremondi
相关产品推荐
相关产品推荐

