Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何从Ruby调用Jekyll命令_Ruby On Rails_Ruby_Jekyll - Fatal编程技术网

Ruby on rails 如何从Ruby调用Jekyll命令

Ruby on rails 如何从Ruby调用Jekyll命令,ruby-on-rails,ruby,jekyll,Ruby On Rails,Ruby,Jekyll,我有一个Rails应用程序,可以在同一台服务器上创建/构建一些Jekyll站点。现在,我用如下反勾号调用Jekyll命令: def build_jekyll result = `jekyll build -s /some/source/path -d /some/dest/path` end 这很好,但感觉有点像红宝石。如果jekyll gem在我的Rails gem文件中,有没有一种方法可以使用ruby构建jekyll站点? (从文档中,看起来我会调用Jekyll::Commands::

我有一个Rails应用程序,可以在同一台服务器上创建/构建一些Jekyll站点。现在,我用如下反勾号调用Jekyll命令:

def build_jekyll
  result = `jekyll build -s /some/source/path -d /some/dest/path`
end
这很好,但感觉有点像红宝石。如果jekyll gem在我的Rails gem文件中,有没有一种方法可以使用ruby构建jekyll站点?

(从文档中,看起来我会调用
Jekyll::Commands::Build.Build
,但我不确定如何初始化site参数)

TL;博士 但是你是怎么发现的? 我通过看一眼就明白了这一点。运行
jekyll build
时,将输入源文件。有趣的是

command :build do |c|
  # ommitted

  c.action do |args, options|
    options = normalize_options(options.__hash__)
    options = Jekyll.configuration(options)
    Jekyll::Commands::Build.process(options)
  end
end

HM,看起来实际的工作是在<代码> JekyLL::命令::Buff.Engult/Cudio>中,所以让我们来看看这个方法:

同样,真正的神奇发生在其他地方,即在
Jekyll::Commands::Build.Build中,也在

这反过来调用一个名为
process\u site
的类方法,该类方法来自中定义的超类
Jekyll::Command

因此,我们实际上想在
Jekyll::Site
上调用
process
。我们还需要了解的一件事是如何为
Jekyll::Site
实例指定选项。让我们仔细看看


显然,我们需要提供一个散列,其中包含指向所需目录的
'source'
'destination'
键。其余的配置将由Jekyll使用前面在
bin/Jekyll
中看到的
Jekyll.configuration
方法生成。就这样。现在,唯一要做的就是把这些碎片拼在一起;-)

文档中没有列出方法Jekyll::Site.new。你在哪里找到的?在来源;-)我看到了对该方法的调用,但是在类Jekyll::Site的源代码中没有定义一个新的()方法:我当时心情很好,所以我写了我是如何逐步完成代码的:)您通常在Ruby中定义
initialize
方法来定义构造函数。
new
方法将在内部调用此函数。只有极少数情况下需要覆盖继承自
对象
类的现有
方法。
command :build do |c|
  # ommitted

  c.action do |args, options|
    options = normalize_options(options.__hash__)
    options = Jekyll.configuration(options)
    Jekyll::Commands::Build.process(options)
  end
end
def self.process(options)
  site = Jekyll::Site.new(options)
  self.build(site, options)

  # other stuff
end
def self.build(site, options)
  # some logging going on here

  self.process_site(site)
end
def self.process_site(site)
  site.process
rescue Jekyll::FatalException => e
  # some error handling
end
def initialize(config)
  # more options ...

  self.source          = File.expand_path(config['source'])
  self.dest            = File.expand_path(config['destination'])

  # more options ...
end