• このエントリーをはてなブックマークに追加

nginxでrubyのcgiを動かせるようにする

  • このエントリーをはてなブックマークに追加

linux
zaco muraです。

先日久しぶりに出張に行きまして新幹線で結構な遠出になりました。

そんな中、以前からサブネットマスクの計算とかwhoisとかそういうのをWEBページで作れないかなーと考えていたのを思い出したので暇つぶしがてら実践しました。

スポンサーリンク
Sponsords Link

やりたいこと

・サブネットマスクの計算とかwhoisの確認とかDNS情報の参照とか、そういうのをWEBページで見れたらいいなぁ。(すでにあるけど、自分でも作りたい)
・作るとしたらやっぱりrubyかなぁ。(それ以外書けない)
・どうせなら今ある環境に相乗りさせたいなぁ。(nginx縛り)

ということで、rubyで作ったcgiをnginx上で動かせるようにしようと思います。

参考

http://www.machu.jp/diary/20100429.html#p01

前提

・すでに稼動しているnginxサーバがあること
・gemが使えるようになっていること

パッケージのインストール

なにやら、いろいろとパッケージを入れる必要があるらしい。

# yum install fcgi-devel spawn-fcgi
# gem install fcgi ruby-fcgi

どうやらcgi向けのアクセスがあった場合、nginxはspawn-fcgiというプロセスにリダイレクトするという仕組みらしい。
また、spawn-fcgiはcgiファイル毎にプロセスを立ち上げておく必要があるらしい。
よくわからないので、やりながら理解する。

ということで、まずは定番のhelloworldができるようにしてみる。

1.nginx側の設定

まずnginx側に設定。内容は「.rb宛のアクセスがあったら○○ポートにリダイレクト」ということ。

# vim /etc/nginx/nginx.conf
--------------------------------------
 location ~ \.rb$ {
     root /usr/share/nginx/html/tools;
     fastcgi_pass    127.0.0.1:10500;
     fastcgi_index   tools.rb;
 }
--------------------------------------

# /etc/init.d/nginx reload

これでnginx側はOK

2.cgiの作成

とりあえずまずはhelloworldしてみる。内容は参考ページを参照する。

# cd /usr/share/nginx/html/
# mkdir tools ; cd tools/
# vim tools.rb
-------------------------------
#!/usr/bin/env ruby
require 'rack'
hello = Proc.new do |env|
  Rack::Response.new.finish do |res|
    res.write "Helloworld"
  end
end
Rack::Handler::FastCGI.run hello
------------------------------

3.spawn-fcgiの起動

次にnginxがリダイレクトする先のspawn-fcgiのプロセスを起動する

# spawn-fcgi -p 10500 -f /usr/share/nginx/html/tools/tools.rb 
spawn-fcgi: child spawned successfully: PID: 2113

上記のようにsuccessfullyと表示されればOK。

この時、spawn-fcgi自体のプロセスは消えてrubyのプロセスが残る。

# ps -ef | grep tools.rb
root      2113     1  0 12:22 ?        00:00:00 ruby /usr/share/nginx/html/tools/tools.rb

これで準備はOK。実際にWEBページからアクセスしてみると、以下のように表示されました。
nginx_de_cgi
ばっちり表示されました。
本番環境で使うならspawn-cgiを自動起動するようにしとかないと忘れそう。

nginxの仕組みとかあんまり理解できてないなぁーと改めて思った今日この頃でした。

スポンサーリンク
Sponsords Link
  • このエントリーをはてなブックマークに追加

ZacoDesign

スポンサーリンク
Sponsords Link