Rubyのgem server は手軽にドキュメントを引けるので重宝しています.このサーバーは手軽に作れるしそこそこページ数あるのでRubyで外部HTML取得するスパイダを書いているときにテストサーバーとして重宝します.
Test::Unitでテスト用のサイトが欲しいのでgem server を活用する.
Gem Server を一時的に起動して、テストのなかでOpen-URIする対象にすればNokogiriやMechanizeを組み込んだクラスの動作チェックに使えそうです.
gem server をruby のソースコード中で使えると嬉しい.テストWEBサーバーとして活用できる
テストコード中でGemServerを起動して終了する
ruby の gem server をRubyスクリプト中で起動したい.でもってopen-uriをするプログラム
の実験台になって貰い、テストコードで活用する.
gem server をスクリプトから起動するには、gem ファイルを見てみると、大体分かる。最低限以下があれば十分らしい
require 'rubygems' require 'rubygems/gem_runner' require 'rubygems/exceptions' args = ["server","--bind=localhost","--port=10080","--no-daemon"] Gem::GemRunner.new.run args
テストで活用する
def setup require 'rubygems' require 'rubygems/gem_runner' require 'rubygems/exceptions' args = ["server","--bind=localhost","--port=10080","--no-daemon"] Gem::GemRunner.new.run args end def test_something_like_spidering require 'open-uri' open("localhsot:10080"){|f| #do something for parsing } end
こんな感じでmechanizeの実験台にちょうど良いかもね.
Gem Serverをdaemons で常時起動する
ここまで出来れば、ついでに gem server をデーモンにする方法も考えておく
gem_server を起動時に実行したいので,Daemon化しておくとか。単体でもDaemonになるんだけど、そこはご愛敬、Daemonsを試したかった.
gem_server.rb
#!/usr/bin/env ruby require 'rubygems' require 'rubygems/gem_runner' require 'rubygems/exceptions' require 'daemons' Daemons.run_proc('gem_server',{:log_output=> STDOUT}) do args = ["server","--bind=localhost","--port=10080","--no-daemon"] begin Gem::GemRunner.new.run args rescue Gem::SystemExitException => e exit e.exit_code end end
あえて --no-daemonをつかって daemon化の処理をDaemonsパッケージに任せている。
どんなスクリプトでもdaemon化できるruby daemonsパッケージは偉大です.
daemonsでデーモンにすると管理が楽
gem_server.rb start #起動 gem_server.rb stop #停止 gem_server.rb restart #再起動
daemonsパッケージはrubygemsで提供されている
gem install daemons
ruby1.9以降は Proccess.daemonが出来たのでそっちを使ってもいよ
でももっぱら god がオススメ.
ログを見たいときは daemons パッケージの使い方に従うといい
Daemons.run_proc('gem_server',{:log_output=> STDOUT}) do
STDOUT を指定すると gem_server.log が、実行ディレクトリに出来る.
そのほかはSyslogとかいろいろと組み合わせて使うと良い.
一つだけ注意
Daemonパッケージはpid ファイルをつかってプロセス番号を覚えておく
もちろんpid が重要なのです.pidファイルは設定するべき.
設定を省略するとカレントディレクトリの中に作られるので
実行ディレクトリが変わるとstop できなくなる
takuya@/home/takuya/ $./test_server start #開始 takuya@/home/takuya/ $./test_server stop #停止できる takuya@/home/takuya/sample $../test_server stop #停止できない