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ファイルのフルパスが表示されてしまっていた。
以下のように--nameオプション付きで起動すると、任意の名前を表示させることが出来る。
$ gunicorn_paster --name=pyramid_sample develop.ini
こうなった。
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を選ぶメリットとしては、安定性とか実績とかモジュールの豊富さだろうか。
どーでもいいけど最初は何て読むか分からなくて「えぬじんくす」って読んでたんだけど「えんじんえっくす」なんだよね。