Ruby - 错误:未定义的方法`[]'为零:NilClass

时间:2018-01-30 17:16:50

标签: ruby null jekyll

所以,我是Ruby的新手,我试图将this photo gallery安装到我的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-exiftag-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'])

&#34;未定义的方法`[]&#39;是什么意思?为零:NilClass?&#34;究竟是什么让这个问题发生?

1 个答案:

答案 0 :(得分:1)

错误可能只是表示您未在配置文件中设置['exiftag']['sources']

您的配置文件应该具有类似于下面的内容(entry1和entry2只是示例):

exiftag:
  sources:
    - entry1
    - entry2

请注意,缩进在YAML中也很重要。