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

はちゅにっき

こっちのブログはまったり更新

Catalyst ことはじめ

散々既出なのだし、もっと知識豊富でタメになるエントリを書いてる方がいるのに
今さら書くのはどーかと思うけど、とりあえずメモ程度に。
ただし、以下の条件つき。

  • root 権限がない
  • mod_perl は使えない

インストール

一般ユーザが、CPANを使ってモジュールをインストールする方法は
前に書いた記憶が。。。*1
そんなワケで、最近お気に入りな zsh から

$ perl -MCPAN -e 'install Task::Catalyst'
$ perl -MCPAN -e 'install Catalyst'

でインストール。
インストールは途中問題が発生したり*2したけど
なんとか終了。

プロジェクト生成

アルバムCGIを作りたいので、それっぽい名前のプロジェクトを生成

$ cd public_html/cgi-bin/  # Project つくるばしょ
$ catalyst.pl Album        # Project 生成
$ cd Album                 # Project の中にはいるよ
$ ./script/album_server.pl # とりあえず確認してみる

この状態で、サーバの 3000 番ポートにブラウザからアクセスすると
Catalyst の Demo ページが表示されました。

CGI として動かしたい

mod_perl が使えない & モジュールが一般ユーザのディレクトリにインストールされているため
CGI として動かすためにちょっとした準備。
script/ の中に CGI として動かすのに必要な設定が書いてあるので
それをコピーして

$ pwd
/home/yuki/public_html/cgi-bin/Album
$ cp script/album_cgi.pl album.cgi
$ vi album.cgi

コピーした album.cgi に

# モジュールをインストールしてあるディレクトリへの path
use lib '/path/to/module/dir';

を書き加えて保存。
ブラウザから http://servername/~yuki/cgi-bin/Album/album.cgi にアクセスし
しっかり動いてるのを確認しました。

問題点。わからないこと。

この、CGIで動いている状態だと F5 などでページをリロードすると
画像、CSS が読み込まれなくなってしまう。。。
読み込まれない状態で、もう一度リロードすると
今度は読み込まれる。。。
で、もう一度リロードすると、また読み込まれない。。。
この状況のループになってしました。
たぶん、Catalyst::Plugin::Static::Simple の使い方に問題がありそうなんだけど。。。

おまけ: debian etch + apache2 + mod_perl2 で使う

家の貧弱サーバ (200MHz 64MB) なら root 権限があるので
mod_perl2 で動かせそう!?
と思い、インストール。
さすが root、かくがちがった。

# aptitude install libapache2-mod-perl2

インストールもすぐに終了*3して、apache の設定に。
まずは mod_perl を有効に

# a2enmod perl                   # mod_perl 有効に
This module is already enabled!  # あ、ごめんなしあ><

site-enabled なファイル mod_perl で動くように設定を書き書き。

# vi /etc/apache2/site-enabled/mysite

以下が書き加えた後の site-enabled な設定ファイルの内容

NameVirtualHost *:80
<VirtualHost *:80>
    DocumentRoot /www/public

    ......

    Alias /album/ /www/catalyst/Album/
    PerlOptions +Parent
    PerlSwitches -I/www/catalyst/Album/lib
    PerlLoadModule Album
    PerlTransHandler Album
    <Location /album>
        SetHandler modperl
        PerlResponseHandler Album
        Options +ExecCGI
    </Location>

    ......

</VirtualHost>

この辺に関しては

が、とてもとてもとても役に立ちました。
とてもとてもとてもとても感謝です。
これで

# /etc/init.d/apache2 force-reload

apache を再起動し
http://servername/album/
にアクセスすると、無事に mod_perl な環境で Catalyst が動くことが確認できました。

おまけ: mod_perl のメモリ消費量

# top

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 5047 www-data   9   0 21740  13m 8504 S  0.0 21.4   0:04.70 apache2
 5044 www-data   9   0 21464  12m 8824 S  0.0 21.1   0:04.06 apache2
 5046 www-data   9   0 21224  12m 9152 S  0.0 20.5   0:03.95 apache2
 5045 www-data   9   0 21204  12m 9156 S  0.0 19.7   0:03.89 apache2
 5038 root       9   0 20568 9024 7712 S  0.0 14.4   0:16.13 apache2

# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 1  0  26872   1752   2496  22968    0    0     2     2    3   14  0  0 99  0

ぎゃー。
もうちょと頑張れるサーバが必要な気がします。

*1:http://d.hatena.ne.jp/magicalhat/20061005/1160027722

*2:http://d.hatena.ne.jp/magicalhat/20080117/1200561582

*3:実際は、この後大ハプニング http://d.hatena.ne.jp/magicalhat/20080121/1200895579