Rackup した環境を FastCGI で回す
某 IRC ログの Web 用フォーマッタを Ruby で書いたので、それを Rackup して Lighttpd に載せたときのメモ。Rackup した環境を FastCGI で動かしている例が見つけられなかったので書いとく。
Rack::Builder の戻り値も callable なので、Rack::Handler::FastCGI.run の引数に与えることができる。なんでソース読むまでこれに気づかなかったんだろう。
irclog-rackup.fcgi
#!/usr/bin/ruby require 'rubygems' require 'fcgi' require 'rack' # nadoka のログを HTML に整形 require 'irclog_app.rb' # nadoka のログを HyperEstraier で全文検索 require 'finder_app.rb' # callable を Rack::Builder で Rackup したものも callable である app = Rack::Builder.new do # ログは Lighttpd がとる #use Rack::CommonLogger # 転んでも泣かない #use Rack::ShowExceptions # 運用環境では遅いから使わない #use Rack::Reloader # prototype.js とか使ってるので JavaScript 置き場を指定 use Rack::Static, :urls => ["js"] # lighttpd で設定するので不要 # use Rack::Auth::Basic do |username, password| # case username # when "********" # password == "********" # end # end # ログビューア携帯版 map "/m" do run IrclogAppKtai.new end # ログ全文検索 map "/find" do run LogFinderApp.new end # ログビューア PC 版 map "/" do run IrclogApp.new end end Rack::Handler::FastCGI.run app
/etc/lighttpd/conf-enabled/10-ssl.conf
$HTTP["url"] =~ "^/irclog" { auth.backend = "htpasswd" auth.backend.htpasswd.userfile = "/etc/lighttpd/passwd/irclog" auth.require = ("/irclog" => ( "method" => "basic", "realm" => "RESTRICTED", "require" => "user=********" )) fastcgi.server = ( "/irclog" => ( "localhost" => ( "bin-path" => "/var/www/ssl/irclog/irclog-rackup.fcgi", "socket" => "/tmp/irclog.socket", "check-local" => "disable", "broken-scriptfilename" => "enable" ) ) ) }