読者です 読者をやめる 読者になる 読者になる

PyramidをGunicornで動かした

簡単なアプリならPyramidで書けそうな感じにはなったので、次はDeploy周りについて調べてみた。
pipでインストールできるし定番っぽいところでGunicornの上で動かしたので手順をメモっておく。

インストール

新しいvirtualenv作ってそこにインストールしていく。

$ mkvirtualenv --distribute --no-site-packages --python=python2.7 gunicorn
$ pip install pyramid gunicorn

Pyramidアプリケーション生成

適当なディレクトリにscaffoldからpyramidアプリを作る。

$ mkdir dev
$ cd dev
$ paster create -t pyramid_starter sample
$ cd sample
$ python setup.py develop

起動

あとはgunicorn_pasterでiniファイルを指定するだけ!簡単!

$ gunicorn_paster develop.ini
2011-07-08 00:46:14 [27106] [INFO] Starting gunicorn 0.13.4
2011-07-08 00:46:14,397 INFO  [gunicorn.error][MainThread] Starting gunicorn 0.13.4
2011-07-08 00:46:14 [27106] [INFO] Listening at: http://0.0.0.0:6543 (27106)
2011-07-08 00:46:14,399 INFO  [gunicorn.error][MainThread] Listening at: http://0.0.0.0:6543 (27106)
2011-07-08 00:46:14 [27106] [INFO] Using worker: sync
2011-07-08 00:46:14,401 INFO  [gunicorn.error][MainThread] Using worker: sync
2011-07-08 00:46:14 [27109] [INFO] Booting worker with pid: 27109
2011-07-08 00:46:14,409 INFO  [gunicorn.error][MainThread] Booting worker with pid: 27109

Googleで検索してもGunicorn + Pyramidについて情報が全然なかったんだけど、こんな簡単だからわざわざ書く人がいなかったのかな…。

おまけ gunicorn-console

gunicornはプロセスの管理をシグナルで行うそうだけど、コマンドから直接シグナル送るのはなんだかなあと思って管理ツール的な物を探してみた。で、こんなものを見つけた。

cursesを使ったCUIアプリケーションで、以下のようなことが出来るらしい。

  • ステータス確認
    • master毎のpid, port, prosess name, memory, worker数
  • プロセス操作
    • masterのリロード
    • workerの追加
    • master, workerのkill

ちなみに、前述の起動コマンドで立ち上げてからgunicorn-consoleでステータスを確認してみたところ、process nameにはiniファイルのフルパスが表示されてしまっていた。

f:id:inoshirou:20111024232151p:image

以下のように--nameオプション付きで起動すると、任意の名前を表示させることが出来る。

$ gunicorn_paster --name=pyramid_sample develop.ini

こうなった。

f:id:inoshirou:20111024232152p:image

psコマンドにも反映される。

  PID TTY      STAT   TIME COMMAND
27325 pts/6    S+     0:00 gunicorn: master [pyramid_sample]
27328 pts/6    S+     0:00 gunicorn: worker [pyramid_sample]

ちなみこのプロセスに名前を付ける機能はsetproctitleというパッケージを入れることで使える。pipでgunicorn-consoleインストールすれば一緒に入るはず。

こんな感じだが、機能が豊富なわけでもないしscreen上で起動すると表示が点滅というかチカチカして非常に見づらかったので多分使わない。
本気で運用する気になったら管理コマンドでも作ろうかな。やっぱりこういう時はFabric使うのがいいのかね?

参考URL

http://w.koshigoe.jp/study/?ruby-unicorn-intro
オリジナルのunicornについてのまとめだけど、概要を掴むには良い資料だと思った。