gem serverをlaunchdで動かしておく
Rubyで、gem installした後、ざっとドキュメントを見たいとき、どうするのが良いでしょうか?
Rubyで、gem installした後、ざっとドキュメントを見たいとき、どうするのが良いでしょうか?→gem serverで解決 - rubyco(るびこ)の日記
(→解決しました「gem serverを動かして、表示されたURLをブラウザで見る」らしいです)
というエントリを見て、割と便利に使っているのですがあんまりみんなが使ってないのかもしれない方法があるのでご紹介。
launchdでサービスとして動かす
Macにはlaunchdというものがあります。おいらもman読んだぐらいしか知識がないので説明はうまくできません。大体Linuxで言うinitみたいなもんです。第1回 initを置き換えるlaunchd【前編】 (1/3) - ITmedia エンタープライズや第2回 initを置き換えるlaunchd【後編】 (1/3) - ITmedia エンタープライズという記事もありますので併せてご一読ください。
で、このlaunchdで予めgem serverをサービスとして動かしておくとちょくちょくgemに含まれているrdocを読む際には結構便利になります。
設定ファイルの置き場所
- $HOME/Library/LaunchAgents
- /Library/LaunchAgents
- /Library/LaunchDaemons
- /System/Library/LaunchAgents
- /System/Library/LaunchDaemons
この辺りらしいです。
LaunchAgentsとLaunchDaemonsの違い
launchdが起動するサービスは大きく分けて2つ、AgentとDaemonに分類される。
第1回 initを置き換えるlaunchd【前編】 (2/3) - ITmedia エンタープライズ
Daemonはいわゆるデーモンであり、root権限での動作を前提としている。これはログインしているユーザーが誰であるか、そもそもログインしているユーザーがいるかといったこととは関係を持たないサービスを意味する。
一方AgentはDaemonとは異なり、現在ログインしているユーザーごとに起動される各ユーザー向けのサービスを意味する。例えば「ことえり」やATOKのような入力プログラム、iCalやiTunesのヘルパープログラムといったユーザーごとに実行されるバックエンドサービスを起動するのに使用できる。
という訳でとりあえず自分のところだけで動かしたいので $HOME/Library/LaunchAgents に置きましょう。
設定ファイル launchd.plist を書く
おいらが使っているのは以下。名前は org.rubygems.server.plist とか適当に名付けています。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>org.rubygems.server</string> <key>OnDemand</key> <false/> <key>ProgramArguments</key> <array> <string>/opt/local/bin/gem</string> <string>server</string> <string>--daemon</string> </array> </dict> </plist>
launchctlで設定ファイルを読み込み起動する
上のplistをorg.rubygems.server.plistで保存した場合
launchctl load -w org.rubygems.server.plist launchctl start org.rubygems.server
load
launchctl load [-w] launchd.plist
wオプションは強制読み込み
unload
launchctl unload [-w] launchd.plist
wオプションは強制的に無効に
start
launchctl start jobname
jobname = launchd.plistのLabel要素で指定したもの
stop
launchctl stop jobname
jobname = launchd.plistのLabel要素で指定したもの
ブラウザで表示してみる
start した状態で http://localhost:8808 を表示して表示を確認する。表示できれば成功。