Time to Read

3分

ブログを移行してるんですが(実は)、頓挫気味なので普通にブログ記事を増やします。

今日は、懐かしのアイテム mongrel の進化版といわれる mongrel2 を、Rubyのために使います。サンプルとして Padrino を使いますが、この先を見ての通り rackup で走らせるんで、大抵の Ruby 製フレームワークでイケるって信じてます。

まず、 ZeroMQ を入れる

GettingStarted を参照に。

ここで罠なんですけど、DebianとかUbuntuのレポジトリには普通に libzmq-dev が存在してしまっていますが、バージョンが若干古くて mongrel2 がコンパイル出来ません! 素直にソースインストールするしかない模様……(deb作ってもいいですけど)。

追記: Ubuntu nattyDebian sid のZeroMQのバージョンは、公式GettingStartedで落としてきているのと同じ 2.0.10 なので、こちらならビルド可能かもしれません。

1
2
3
4
5
wget http://download.zeromq.org/zeromq-2.1.6.tar.gz
# いつもの
tar xzf zeromq-2.1.6.tar.gz && cd zeromq-2.1.6/ && ./configure && make && sudo make install
# おまじない
sudo ldconfig

Mongrel2 を入れる

これも、普通にビルドしましょう。今回「とりあえず立ち上げる」感がありますので色々適当ですすいません。

1
2
wget http://mongrel2.org/static/downloads/mongrel2-1.5.tar.bz2
tar xjf mongrel2-1.5.tar.bz2 && cd mongrel2-1.5/ && make clean all && sudo make install

Padrino のプロジェクトを作る

投げやりな感じで作ります。

1
2
3
4
gem install padrino
padrino gen project mongrino
cd mongrino
mkdir log run # 作ってくれないので…

Gemfile を編集:

1
2
# Server
gem 'rack-mongrel2', '~> 0.2.0', :require => nil

しかるのち bundle

投げやりなコントローラを作る:

1
2
3
4
5
6
7
8
9
10
# in app/controllers/index.rb
Mongrino.controllers :index do
  get :index do
    "Hello, mongrino"
  end
 
  get :show, :map => "/:name" do
    "Hello, #{params[:name]}"
  end
end

Mongrel2 を立ち上げる

まず、 mongrel2.conf を適当に作る。リポジトリにあるサンプルを落としてきて編集すればいいんじゃないかな。もしくは下のgistをそのまま使ってください。

設定のためのsqliteデータベースを作成:

1
m2sh load -config mongrel2.conf --db config/mongrel2.sqlite

その設定.sqlite を元に、mongrel2プロセスを起動:

1
m2sh start --db config/mongrel2.sqlite -uuid padrino-example -sudo

デーモン化するオプションが「-sudoらしいです

Padrino を rackup

1
rackup -s Mongrel2

これだけ。padrino start -a は対応していないので、こっちで起動したい場合は(おそらく、僅かばかりの)ハックが必要でしょう。

http://localhost:8080 を見てみましょう。

立ち上がっています。 http://localhost:8080/%E3%81%86%E3%81%A5%E3%82%89 みたいなのも問題無し。

What’s good???

Mongrel2 にすることのメリット? は実はあんまよく分かっていません。Rubyアプリケーションレベルでの再起動の際には、Mongrel2は再起動要らないんで、再起動とかスピンアップとかが高速になるかもしれません(でも、unicornと比べてメリットがあるかって言うと……)。あと、他の言語で書いたアプリケーションと一緒に動かす際に良さそう?

Mongrel2 のドキュメントを詳しく見てみようかな~とか思っています。

See also