所以,我是Ruby的新手,我正在尝试将这个照片库安装到我的Jekyll博客中。但是,当我尝试运行时
jekyll build
我收到此错误消息:
Liquid Exception: undefined method `[]' for nil:NilClass in photography/index.html
jekyll 3.7.2 | Error: undefined method `[]' for nil:NilClass
使用 --trace 它指向我:
/Users/hal9000/Desktop/Plommonstop/_plugins/jekyll-exiftag-mod.rb:18:in `render': undefined method `[]' for nil:NilClass (NoMethodError)
但是现在我不明白该如何进行。 Jekyll-exiftags-mod 看起来像这样:
require 'exifr/jpeg'
#Based on https://github.com/benib/jekyll-exiftag by Beni Buess (MIT License)
#Edited to work as a Liquid-Block instead of a Liquid-Tag, reads the filename from between the
#brackets. --T.Winter
module Jekyll
class ExifTag < Liquid::Block
def initialize(tag_name, params, token)
super
@args = self.split_params(params)
end
def render(context)
#abort context.registers[:site].config['source'].inspect
sources = Array.new(context.registers[:site].config['exiftag']['sources'])
# first param is the exif tag
tag = @args[0]
# if a second parameter is passed, use it as a possible img source
if @args.count > 1
sources.unshift(@args[1])
end
# the image can be passed as the third parameter
img = super
# first check if the given img is already the path
if File.exist?(img)
file_name = img
else
# then start testing with the sources from _config.yml
begin
source = sources.shift
file_name = File.join(context.registers[:site].config['source'], source, img)
end until File.exist?(file_name) or sources.count == 0
end
# try it and return empty string on failure
begin
exif = EXIFR::JPEG::new(file_name)
return tag.split('.').inject(exif){|o,m| o.send(m)}
rescue
"ERROR, EXIF-Tag RB"
end
end
def split_params(params)
params.split(",").map(&:strip)
end
end
end
Liquid::Template.register_tag('exiftag', Jekyll::ExifTag)
对于第 18 行:
sources = Array.new(context.registers[:site].config['exiftag']['sources'])
"nil:NilClass 的未定义方法 '[]' 是什么意思?究竟是什么使这个问题发生?
该错误可能仅表示您尚未在配置文件中设置['exiftag']['sources']
。
您的配置文件应该类似于以下内容(entry1 和 entry2 只是示例(:
exiftag:
sources:
- entry1
- entry2
请注意,缩进在 YAML 中也很重要。