Ruby Jekyll插件不';t打印变量

Ruby Jekyll插件不';t打印变量,ruby,Ruby,对,所以我试着做一些非常简单的事情,就是浏览一些文件并打印出内容。这是我的\u plugins/test.rb文件: module Jekyll class TestPlugin < Liquid::Tag def render(context) Dir.glob("somefolder/*.someextension") do |my_file| file = File.open(my_file) contents = fi

对,所以我试着做一些非常简单的事情,就是浏览一些文件并打印出内容。这是我的
\u plugins/test.rb
文件:

module Jekyll
  class TestPlugin < Liquid::Tag
    def render(context)
      Dir.glob("somefolder/*.someextension") do |my_file|
          file = File.open(my_file)
          contents = file.read
          # print contents
      end
    end
  end
end

Liquid::Template.register_tag('testplugin', Jekyll::TestPlugin)

当通过
{%testplugin%}
调用时,它们都不会输出任何内容。当我把我的
Dir.glob
东西换成类似
“你好”
的东西时,输出将是正确的。不用说,我对Ruby非常不熟悉。

这里的问题是
Dir.glob
当给定一个块(正如您所做的)时,它会

这意味着您的
render
方法实际上没有返回任何内容

一种解决方案是调用
glob
,而不使用块。然后它将返回匹配文件名的列表,您可以将其映射到文件的内容

例如,要返回所有匹配文件的组合内容:

def render(context)
  Dir.glob("somefolder/*.someextension").map do |filename|
    File.read(filename)
  end.join("\n")
end

这是有道理的,而且有效!在这个特定的实例中,我想对文件名和内容执行一些操作,并在文件内容本身的上下文中输出这些操作,因此我不一定要加入它们,但我理解这个想法!顺便问一下,这会不会有一个原因使所有东西都以相反的顺序输出?我有
file1
file2
,它将首先输出
file2
顺序取决于
glob
返回的文件名的顺序,因此您可能需要添加一个排序步骤:
Dir.glob(“somefolder/*.someextension”).sort.map…
def render(context)
  Dir.glob("somefolder/*.someextension").map do |filename|
    File.read(filename)
  end.join("\n")
end