Ruby+Jekyll编译静态页遇TZInfo时区数据源错误求助
解决Jekyll编译时的TZInfo时区数据源错误
问题描述
我今天尝试用Ruby+Jekyll编译从academicpages仓库fork来的静态网页文件,已完成Ruby、Gem及相关依赖包的安装,但执行bundle exec jekyll build命令编译时,持续弹出时区配置错误。查阅大量问答并咨询ChatGPT后,现有方法均无效,求更优解决办法。
错误日志
C:\Users\asus\Desktop\pioneerzhou.github.io>bundle exec jekyll build Configuration file: C:/Users/asus/Desktop/pioneerzhou.github.io/_config.yml jekyll 3.9.5 | Error: No source of timezone data could be found. Please refer to https://tzinfo.github.io/datasourcenotfound for help resolving this error. C:/Users/asus/.local/share/gem/ruby/3.2.0/gems/tzinfo-2.0.6/lib/tzinfo/data_source.rb:159:in `rescue in create_default_data_source': No source of timezone data could be found. (TZInfo::DataSourceNotFound) Please refer to https://tzinfo.github.io/datasourcenotfound for help resolving this error. from C:/Users/asus/.local/share/gem/ruby/3.2.0/gems/tzinfo-2.0.6/lib/tzinfo/data_source.rb:156:in `create_default_data_source' from C:/Users/asus/.local/share/gem/ruby/3.2.0/gems/tzinfo-2.0.6/lib/tzinfo/data_source.rb:55:in `block in get' from C:/Users/asus/.local/share/gem/ruby/3.2.0/gems/tzinfo-2.0.6/lib/tzinfo/data_source.rb:54:in `synchronize' from C:/Users/asus/.local/share/gem/ruby/3.2.0/gems/tzinfo-2.0.6/lib/tzinfo/data_source.rb:54:in `get' from C:/Users/asus/.local/share/gem/ruby/3.2.0/gems/tzinfo-2.0.6/lib/tzinfo/timezone.rb:235:in `data_source' from C:/Users/asus/.local/share/gem/ruby/3.2.0/gems/tzinfo-2.0.6/lib/tzinfo/timezone.rb:128:in `get' from C:/Users/asus/.local/share/gem/ruby/3.2.0/gems/jekyll-3.9.5/lib/jekyll/utils/win_tz.rb:16:in `calculate' from C:/Users/asus/.local/share/gem/ruby/3.2.0/gems/jekyll-3.9.5/lib/jekyll.rb:130:in `set_timezone' from C:/Users/asus/.local/share/gem/ruby/3.2.0/gems/jekyll-3.9.5/lib/jekyll.rb:118:in `block in configuration' from <internal:kernel>:90:in `tap' from C:/Users/asus/.local/share/gem/ruby/3.2.0/gems/jekyll-3.9.5/lib/jekyll.rb:117:in `configuration' from C:/Users/asus/.local/share/gem/ruby/3.2.0/gems/jekyll-3.9.5/lib/jekyll/command.rb:43:in `configuration_from_options' from C:/Users/asus/.local/share/gem/ruby/3.2.0/gems/jekyll-3.9.5/lib/jekyll/commands/build.rb:29:in `process' from C:/Users/asus/.local/share/gem/ruby/3.2.0/gems/jekyll-3.9.5/lib/jekyll/commands/build.rb:18:in `block (2 levels) in init_with_program' from C:/Users/asus/.local/share/gem/ruby/3.2.0/gems/mercenary-0.3.6/lib/mercenary/command.rb:220:in `block in execute' from C:/Users/asus/.local/share/gem/ruby/3.2.0/gems/mercenary-0.3.6/lib/mercenary/command.rb:220:in `each' from C:/Users/asus/.local/share/gem/ruby/3.2.0/gems/mercenary-0.3.6/lib/mercenary/command.rb:220:in `execute' from C:/Users/asus/.local/share/gem/ruby/3.2.0/gems/mercenary-0.3.6/lib/mercenary/program.rb:42:in `go' from C:/Users/asus/.local/share/gem/ruby/3.2.0/gems/mercenary-0.3.6/lib/mercenary.rb:19:in `program' from C:/Users/asus/.local/share/gem/ruby/3.2.0/gems/jekyll-3.9.5/exe/jekyll:15:in `<top (required)>' from C:/Users/asus/AppData/Local/Microsoft/WindowsApps/jekyll:32:in `load' from C:/Users/asus/AppData/Local/Microsoft/WindowsApps/jekyll:32:in `<main>' C:/Users/asus/.local/share/gem/ruby/3.2.0/gems/tzinfo-2.0.6/lib/tzinfo/data_sources/zoneinfo_data_source.rb:252:in `initialize': None of the paths included in TZInfo::DataSources::ZoneinfoDataSource.search_path are valid zoneinfo directories. (TZInfo::DataSources::ZoneinfoDirectoryNotFound) from C:/Users/asus/.local/share/gem/ruby/3.2.0/gems/tzinfo-2.0.6/lib/tzinfo/data_source.rb:157:in `new' from C:/Users/asus/.local/share/gem/ruby/3.2.0/gems/tzinfo-2.0.6/lib/tzinfo/data_source.rb:157:in `create_default_data_source' from C:/Users/asus/.local/share/gem/ruby/3.2.0/gems/tzinfo-2.0.6/lib/tzinfo/data_source.rb:55:in `block in get' from C:/Users/asus/.local/share/gem/ruby/3.2.0/gems/tzinfo-2.0.6/lib/tzinfo/data_source.rb:54:in `synchronize' from C:/Users/asus/.local/share/gem/ruby/3.2.0/gems/tzinfo-2.0.6/lib/tzinfo/data_source.rb:54:in `get' from C:/Users/asus/.local/share/gem/ruby/3.2.0/gems/tzinfo-2.0.6/lib/tzinfo/timezone.rb:235:in `data_source' from C:/Users/asus/.local/share/gem/ruby/3.2.0/gems/tzinfo-2.0.6/lib/tzinfo/timezone.rb:128:in `get' from C:/Users/asus/.local/share/gem/ruby/3.2.0/gems/jekyll-3.9.5/lib/jekyll/utils/win_tz.rb:16:in `calculate' from C:/Users/asus/.local/share/gem/ruby/3.2.0/gems/jekyll-3.9.5/lib/jekyll.rb:130:in `set_timezone' from C:/Users/asus/.local/share/gem/ruby/3.2.0/gems/jekyll-3.9.5/lib/jekyll.rb:118:in `block in configuration' from <internal:kernel>:90:in `tap' from C:/Users/asus/.local/share/gem/ruby/3.2.0/gems/jekyll-3.9.5/lib/jekyll.rb:117:in `configuration' from C:/Users/asus/.local/share/gem/ruby/3.2.0/gems/jekyll-3.9.5/lib/jekyll/command.rb:43:in `configuration_from_options' from C:/Users/asus/.local/share/gem/ruby/3.2.0/gems/jekyll-3.9.5/lib/jekyll/commands/build.rb:29:in `process' from C:/Users/asus/.local/share/gem/ruby/3.2.0/gems/jekyll-3.9.5/lib/jekyll/commands/build.rb:18:in `block (2 levels) in init_with_program' from C:/Users/asus/.local/share/gem/ruby/3.2.0/gems/mercenary-0.3.6/lib/mercenary/command.rb:220:in `block in execute' from C:/Users/asus/.local/share/gem/ruby/3.2.0/gems/mercenary-0.3.6/lib/mercenary/command.rb:220:in `each' from C:/Users/asus/.local/share/gem/ruby/3.2.0/gems/mercenary-0.3.6/lib/mercenary/command.rb:220:in `execute' from C:/Users/asus/.local/share/gem/ruby/3.2.0/gems/mercenary-0.3.6/lib/mercenary/program.rb:42:in `go' from C:/Users/asus/.local/share/gem/ruby/3.2.0/gems/mercenary-0.3.6/lib/mercenary.rb:19:in `program' from C:/Users/asus/.local/share/gem/ruby/3.2.0/gems/jekyll-3.9.5/exe/jekyll:15:in `<top (required)>' from C:/Users/asus/AppData/Local/Microsoft/WindowsApps/jekyll:32:in `load' from C:/Users/asus/AppData/Local/Microsoft/WindowsApps/jekyll:32:in `<main>'
解决办法
1. 安装tzinfo-data依赖包
Windows系统默认没有时区数据库,手动安装tzinfo-data即可提供TZInfo所需的数据源:
- 直接执行命令:
gem install tzinfo-data - 或者在项目的Gemfile中添加以下内容,再执行
bundle install:gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw]
2. 在Jekyll配置中指定时区
跳过自动时区检测,直接在_config.yml文件中添加你的时区配置,比如:
timezone: Asia/Shanghai
常用时区还包括America/New_York、Europe/London等,根据实际情况选择。
3. 检查Ruby与Jekyll版本兼容性
你当前使用Ruby 3.2.0搭配Jekyll 3.9.5,两者可能存在适配问题:
- 尝试降级Ruby到3.1.x版本,或者升级Jekyll到4.x版本,执行
gem install jekyll --version 4.3.3后重新编译。
4. 手动设置时区数据源路径
如果上述方法无效,可手动指定zoneinfo目录路径:
- 下载完整的zoneinfo时区数据包,放到本地某个路径,比如
C:\zoneinfo - 设置环境变量
TZINFO_DATA_SOURCE_DIR=C:\zoneinfo,重启命令行后再执行编译命令
内容的提问来源于stack exchange,提问作者superlazyZhou
相关产品推荐
相关产品推荐

