Sphinx+Guardでファイルを変更したときにビルドしつつ、自動でブラウザをリロードする

色々な言語が混ぜまくりすぎなので、他の人も環境を用意するようなものであればあまりおすすめできない。

guardfile内でふつうにWEBRick起動させるコードを書くのがよいんかな。

source/buildするディレクトリを分ける設定であるのを前提としております。

guard-shellとguard-livereloadが必要。

# A sample Guardfile
# More info at https://github.com/guard/guard#readme

guard 'shell' do
  watch(%r{source/.+\.rst}) {
    puts "invoke sphinx build"
    Process.spawn(%|make html >/dev/null|)
  }
end

guard 'shell' do
  watch(%r{app.psgi}) # dummy
  Process.spawn(%|plackup -MPlack::App::Directory -e 'Plack::App::Directory->new({root=>"build/html/"})->to_app' -p 3000|)
end

guard 'livereload' do
  watch(%r{build/html/.+\.html})
end


追記

WEBrickを使うようにしてみました

# A sample Guardfile
# More info at https://github.com/guard/guard#readme

guard 'shell' do
  watch(%r{source/.+\.rst}) {
    puts "invoke sphinx build"
    Process.spawn(%|make html >/dev/null|)
  }
end

guard 'shell' do
  watch(%r{app.psgi}) # dummy
  Process.fork do
    require 'webrick'
    webrick = WEBrick::HTTPServer.new({
      :DocumentRoot => 'build/html/',
      :BindAddress => '127.0.0.1',
      :Port => 3000
    })
    trap("INT") { webrick.shutdown }
    webrick.start
  end
end

guard 'livereload' do
  watch(%r{build/html/.+\.html})
end