トップ «前の日記(2007-09-30) 最新 次の日記(2007-10-02)» 編集

Route 477



2007-10-01

[javascript] JSSpec

RSpecのJavascript版作ったら面白いんじゃね?と思ったんだが、既にあった。

マニュアルはこちら。

expect("Hello World").should_match(/ello/);
expect([1,2,3]).should_have_at_most(4, "items");

RSpecと違って「expect」から始まるんだなぁ。ArrayやStringを拡張すればexpectを無くすこともできると思うんだけど、 どうなんだろ。

デモがかっこいい。

RSpecについては先日出たばかりの伝説の記事(笑)を参照してください。

[scheme] R6RS.Org

http://www.r6rs.org/

来たね!

http://www.r7rs.org/ も既に用意されている。

http://www.r8rs.org/ はまだみたい。(まぁR6RSの策定にかかった年数を考えれば…)

[hiki] Hiki公式サイトが…

http://hikiwiki.org/ja/ が困ったことになってるな。

  • 「インストール」「ダウンロード」などのページが全て表示不能
  • トップページもフッタの上にエラーが

[hiki] コマンドライン一発でn個目のHikiを設置するスクリプトを書いた

./init-hiki.rb hoge

とやると、

  • データ保存用ディレクトリ (/home/user/data/NAME/)
  • Wiki公開用ディレクトリ (/home/user/public_html/NAME/)
  • SVNのリポジトリ (/home/user/svn/NAME/)

を一度に初期化してくれる。これで、思いついた瞬間にWikiが増やせる環境が整った。やったぜ(それWikiFarmでっていうツッコミは無しで)。

そもそもどうやって複数設置すんのって話は 同一サーバで複数のHikiを管理する方法(2007-08-08) を参照のこと。

#!/usr/bin/env ruby
require 'optparse'
require 'pathname'
require 'erb'

# Configuration
SERVER_URL = Pathname.new("http://mono.kmc.gr.jp/")
PUBLIC_HTML = "public_html"
HIKI_INSTALL_PATH = "/home/yhara/bin/hiki"
DRY_RUN = false

def abort(msg)
  puts msg + " abort."
  #exit
end

def shell(cmd)
  puts cmd
  system cmd unless DRY_RUN
end

def make_directory(path, opt={})
  if path.exist? and opt[:must_not_exist]
    abort "directory #{path} already exists."
  end
  unless path.directory?
    puts "making directory #{path}"
    path.mkdir unless DRY_RUN
  end
end

def make_file(path, data, perm)
  if path.exist?
    abort "file #{path} already exists."
  end
  puts "writing file #{path} with permission #{perm}"
  unless DRY_RUN
    if perm
      path.open("wb", perm){|f| f.write data}
    else
      path.open("wb", perm){|f| f.write data}
    end
  end
end

def run_erb(filename, args)
  template = File.read(File.join(File.dirname(__FILE__), filename))
  ERB.new(template).result(binding)
end

if ARGV.size != 1
  puts "usage: #{$0} WIKINAME"
else
  name = ARGV.first
  user = ENV['USER']

  home = Pathname.new("/home")
  make_directory(home + user + "data")
  make_directory(home + user + PUBLIC_HTML)
  make_directory(home + user + "svn")

  data_dir = home + user + "data" + name
  make_directory(data_dir, {:must_not_exist => true})
  web_dir  = home + user + PUBLIC_HTML + name
  make_directory(web_dir, {:must_not_exist => true})
  svn_dir  = home + user + "svn" + name
  make_directory(svn_dir, {:must_not_exist => true})

  puts "---- init web dir ----"
  opts = [
    {
      :tmpl => "hiki.cgi.erb",
      :args => {:hiki_dir => HIKI_INSTALL_PATH},
      :path => web_dir + "hiki.cgi",
      :perm => 0775
    },
    {
      :tmpl => "hikiconf.rb.erb",
      :args => {:repos_root => home + user + "svn" + name,
                :data_path => home + user + "data" + name},
      :path => web_dir + "hikiconf.rb"
    },
    {
      :tmpl => "htaccess.erb",
      :args => {},
      :path => web_dir + ".htaccess",
    },
  ]
  opts.each do |opt|
    make_file(opt[:path], run_erb(opt[:tmpl], opt[:args]), opt[:perm])
  end

  puts "---- init data dir ----"
  puts "access #{SERVER_URL + "~#{user}" + "#{name}/"} to init data dir"
  puts "(press enter if done)"
  $stdin.gets

  puts "---- init svn dir ----"
  shell "svnadmin create #{svn_dir}"
  text_dir = data_dir + 'text'
  shell "svn import -m 'import' #{text_dir} file://#{svn_dir}"
  shell "rm -ri #{text_dir}"
  shell "svn co file://#{svn_dir} #{text_dir}"

  puts "---- done. ----"
end

設定とかそのへんは勘で。

本日のツッコミ(全2件) [ツッコミを入れる]
かずひこ (2007-10-03 07:58)

> Hiki公式サイトが…<br>* info.dbのownerがrootになってました。<br>* FastCGIで動かすと、httpdがSEGVしまくってました<br>* メールで報告くれた方が嬉しい<br>というわけで、なおしました〜。

yhara (2007-10-05 02:45)

ありがとうございます。ご苦労さまです。<br>次からはメールすることにします。<br># webmaster@hikiwiki.orgみたいな連絡先があるといいかも…