2012/09/24

モダン環境物語 - アプリ開発編

検証検証検証…とやってると現実逃避したくなりますこんにちは。

前回に引き続き下記環境の組み上げです。
組み上げといっても入れて終わりだともちろん面白くないので
簡単なデータを入力できるアプリっぽい何かを作成するところまでやりましょう。
OKとなっているところが前回までにインストールだけ完了した環境です。

  • lighttpd(Web Server) - OK
  • Nginx(Proxy) - OK
  • HTML5
  • CSS3
  • jQuery(JavaScript)
  • Python3系 - OK
  • MongoDB - OK

CGIを動かす


さてまずはちょっと寄り道をしましょうか。
わかる人は読み飛ばしを。

lighttpdでcgiを簡単にテストします。
まあモチベーション維持のお遊び程度なのでおつきあいを。
cgiを動かすためにはモジュールを有効化し、
スクリプトを指定ディレクトリに配置するだけです。
では早速モジュールを有効化し、cgiが動く状態にしましょう。

% lighty-enable-mod cgi
% vi /etc/lighttpd/conf-enabled/10-cgi.conf

#/usr/share/doc/lighttpd-doc/cgi.txt

server.module += ("mod_cgi")

$HTTP["url"] =~ "^/cgi-bin/" {
  cgi.assign = (".cgi" => "virtualenvで作成した仮想環境内のpython3.1")
}

これでひとまず設定はOK。
続いてスクリプトの設置ですが、
デフォルトでは/usr/lib/cgi-bin/以下がcgi実行ディレクトリです。
よって以下のようにしてみます。

% vi /usr/lib/cgi-bin/pytest.cgi

import cgi

print("Content-Type: text/html")
print()

cgi.print_environ()

あとはブラウザでURLを直打ちして確認してみましょう。
"http://[IP Address]/cgi-bin/pytest.cgi"で確認可能です。

以上、寄り道終了。

FastCGIで動かす(失敗しました)


普通に使うだけならcgiでも構わないんですが、
最近はサーバリソースの効率的な運用という視点からか
fastcgiでの運用がメジャーになっているように思います。
というわけで設定を作り込んでいきましょう。

さて試してみようとfcgiモジュールを下記のように変更。

server.modules += ( "mod_fastcgi" )

fastcgi.server = (
    ".fcgi" => (
      "localhost" => (
        "socket" => "/lib/init/rw/lighttpd/fastcgi/fastcgi.python.socket-0",
        "check-local" => "disable",
        "broken-scriptfilename" => "enable",
      )
    )
)

そして下記コマンドでスクリプトを起動しておき、Web Serverを再起動。
あとはクライアントからのリクエストを待ち受けるだけとなります。

% spawn-fcgi -a 127.0.0.1 -p 8080 /usr/lib/cgi-bin/pytest.cgi -u www-data -g www-data
spawn-fcgi: child exited with: 0

…あれ、うまくいかない。
調べてみるとプロセスも起動していません。
ネットで見る限りだと"spawn-fcgi: child exited with: 0 successとやらが正しいようです。
6時間くらい格闘しましたが結局うまくいかず、原因もわかりません。

そこでもしかしてと思ってlibfcgi-devパッケージをインストール…ダメ。
pipコマンドでpython-fastcgiパッケージをいれようとするとなぜかエラー。

python3でfastcgiってもしかしてダメ?
ちなみにパッケージの対応状況を見ると…やっぱりダメっぽい。

公式ドキュメントの該当部分曰く、

lighttpd ships its own FastCGI module as well as an SCGI module.

ってことらしいのですが、前提条件としては、

This is a simple WSGI application, but you need to install flup first, as flup handles the low level FastCGI access.

とある。

flupが入るかっていうと実際にやってみればわかりますがダメ。
で、対応状況はというともちろんNG。

というわけでFastCGIでの動作はあえなく断念。
前項目のCGIでの動作で以下は進めます。
教訓、公式ドキュメントの該当部分は一番に目を通しましょう。
(たとえそれが間違っていても)

ちなみにWSGI(Web3)も現状はまともに使えなさそう…。
python3のWeb関連パッケージがPEP444に引っ張られて
仕様が決まらないという理由から対応が遅れているとかなんとか。
参考:http://blog.aodag.jp/2010/09/web3.html


正直一気にモチベーションが下がった。

えーと一応python3を利用してモダンな環境におけるWebアプリ開発の検証
というのが目的だったんですが、あまりにもひどい状況のため断念します。
一応MongoDBはPython3で扱えますし、
HTML/CSSはJinja2に任せるつもりで弄った限りでは問題なさそうでした。

検証は検証でしたが、ブログで他人様にお勧めできるような状態ではとてもありません。
一応python3対応フレームワークとしてQPといったようなものはあるようです。

うーむ…python3.3がでる頃には改善しているこをと祈りたいですね。


それでは、電波送信終了ー。

0 件のコメント:

コメントを投稿