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についてのまとめだけど、概要を掴むには良い資料だと思った。

Python+Webについてのメモ

途中、てきとーに更新していく。

はじめに

最近真面目にPython界隈の情報を集め始めたんだけど、Webサーバ周りは「なんか聞いたことあるけど、どういう特徴なのかよくわからん」ものがいっぱいだったので、調べてみる。
調べてみるのはとりあえずこの辺。

  • Nginx
  • gunicorn
  • tornado
  • meinheld
  • uWSGI

大体調べたら次はDB周りを勉強したい。

Nginx

軽量高性能なWebサーバ/リバースプロキシであり、同時に電子メール(IMAP/POP3)プロキシである。

http://ja.wikipedia.org/wiki/Nginx

node.js調べているときに出てきた名前なので気になっていたもの。あと、ブログとか見てても使ってるPythonistaが多いと思う。なんか「軽量」って言葉には惹かれるよね。
前にNginxを置いて静的なコンテンツを配信、その後ろに動的なコンテンツを処理する別のサーバを立ててそっちに投げるという構成が一般的みたい。Pythonの場合、後ろに何を置くかというと、記事に初めに並べたNginx以降のものを使っているのがそう。まあ他にもいろいろあると思うけど、まずはよく使われてそうなところから調べていきたい。
node.jsもそうだけど、最近は非同期処理が人気のキーワードみたいだね。
apacheと比べると、速度面がもちろん大きなメリットなんだろう。あとは静的なコンテンツと動的なコンテンツでサーバを分けることが出来るから、スケールしやすいところがいいのかな?
逆にapacheを選ぶメリットとしては、安定性とか実績とかモジュールの豊富さだろうか。

どーでもいいけど最初は何て読むか分からなくて「えぬじんくす」って読んでたんだけど「えんじんえっくす」なんだよね。

gunicorn

tornado

meinheld

uWSGI