How to call Jekyll commands from Ruby -
i have rails app creates/builds jekyll sites on same server. right now, i'm calling jekyll commands backticks this:
def build_jekyll result = `jekyll build -s /some/source/path -d /some/dest/path` end
this works fine feels little un-ruby like. if jekyll gem in rails gemfile, is there way can build jekyll site using ruby?
(from docs, looks call jekyll::commands::build.build
i'm not sure how initialize site parameter).
tl;dr
require 'jekyll' conf = jekyll.configuration({ 'source' => 'path/to/source', 'destination' => 'path/to/destination' }) jekyll::site.new(conf).process
but how did find out?
i figured out looking @ the source code. when run jekyll build
, enter source file bin/jekyll
. interesting part here is
command :build |c| # ommitted c.action |args, options| options = normalize_options(options.__hash__) options = jekyll.configuration(options) jekyll::commands::build.process(options) end end
hm, looks actual work done in jekyll::commands::build.process
, let's take method in lib/jekyll/commands/build.rb
:
def self.process(options) site = jekyll::site.new(options) self.build(site, options) # other stuff end
again, actual magic happens somewhere else, namely in jekyll::commands::build.build
, in lib/jekyll/commands/build.rb
def self.build(site, options) # logging going on here self.process_site(site) end
this in turn calls class method called process_site
, comes superclass jekyll::command
defined in lib/jekyll/command.rb
def self.process_site(site) site.process rescue jekyll::fatalexception => e # error handling end
so want call process
on jekyll::site
. 1 thing have yet find out how specify options jekyll::site
instance. let's take closer @ lib/jekyll/site.rb
def initialize(config) # more options ... self.source = file.expand_path(config['source']) self.dest = file.expand_path(config['destination']) # more options ... end
so apparently need supply hash 'source'
, 'destination'
keys pointing desired directories. rest of configuration generated jekyll jekyll.configuration
method saw earlier in bin/jekyll
. that's it. now, thing left putting pieces ;-)
Comments
Post a Comment