Perlの勧め(4) Sledgeを使おう2
onagataniです こんにちわ。
先日新聞の1面を飾るという快挙をしましたが皆さんお元気ですか?
また前回からずいぶん時間をあけてしまいましたが
Perlの勧め第4回です。
前回はapacheとmod_perlのインストールまで完了したので、
今回は実際にSledgeを使用して「hello」を表示する所まで説明したいと思います。
■Sledgeインストール
・ThinkIT
こちらにインストール方法及びSledgeの紹介・簡単なアプリの作成まで掲載されていますので、
インストールまでを済ませて下さい。
●アプリの作成の前に。。
ここまで進めた方はお気づきかもしれませんが、SledgeはWebページ毎にトリガスクリプトが必要になります。
例)
- index.cgi => Exsample::Pages::Root.pmのdispatch_indexを呼び出す
- hoge/index.cgi => Exsample::Pages::Hoge.pmのdispatch_fooを呼び出す
こんな感じです。
これを運用してしまうと、ちょっと大きなサイトだとトリガスクリプトの数が
膨大になってしまい管理しきれなくなります。
そこでSledgeにはSledge::Dispatcherなどのディスパッチモジュールが別途公開されていて、
これを使用するとURLのパスと対応するクラスを記述したファイルを1つ用意すると、
トリガスクリプトが必要なくなります。
例)設定ファイルの中身
- / = Exsample::Pages::Root
- /hoge = Exsample::Pages::Hoge
トリガスクリプトが必要なくなり大分楽になりました。ただしmod_perl専用です。
CGIで動作させたい!設定ファイルなんて用意したくない!という人のために
SledgeではURLのパスから対応するdispatchを自動的に設定するモジュールも公開されています。
Sledge::Engineを使用すると設定ファイルが必要なくなります。
というわけで今後はSledge::Engineを使用してアプリケーションの作成を説明していきます。
・Sledge::Engineのインストール
*事前にSledge本体のインストールは済ませおいて下さい。
*memcachedを使用するのでインストールを事前に済ませておいて下さい。
基本的にはcpan Sledge::Engineでインストールできると思います。
Sledge::Utilsでcpanがエラーになった場合にはSledge::Utilsをダウンロードして、
perl Makefile.pl
make install で直接インストールしてみてください。
再度cpan Sledge::Engineでインストールができるかと思います。
・追加でインストールするモジュール
- Sledge::Session::Memcached セッションをmemcachedに格納するようになります。
- Sledge::Plugin::Validator バリデーション用モジュール
これでやっと準備が整いました。
■アプリケーションの作成
今回は以下の設定でアプリケーションを作成してみたいと思います。
- 作るもの:サーバ管理用のツール
- 出来ること:サーバ情報を記録して一覧で閲覧できるようにする
- プロジェクト名:ServerAdmin
- パス:/var/www/serveradmin
- 文字コード:UTF8(unflagged-utf8)
1・パスを作成する
/var/www/serveradminを作成
(都度変更してください)
2・パス以下にlib、etc、htdocs、viewディレクトリを作成する
etc以下にはhttpdディレクトリを作成
3・apache/mod_perlのconfを作成
画像などをフロントのapache、動的処理をバックエンドのmod_perlで処理できるように
apache用のconfを作成しetc/httpd内に設置し、httpd.confからincludeします。
Serveradmin80.conf
ServerName serveradmin.exsample.com #適宜変更 DocumentRoot /var/www/serveradmin/htdocs #適宜変更 RewriteEngine On RewriteRule ^/((.*)\.(js|css|jpg|gif|png|swf))$ /var/www/serveradmin/htdocs/$1 [L] #適宜変更 RewriteRule ^/(.*) http://localhost:8080/server/$1 [P,L,QSA] ProxyPassReverse / http://localhost:8080/server/
次にmod_perl用のconfを作成し、mod_perl.confからincludeします。
ServerAdmin8080.conf
use lib qw( /var/www/serveradmin/lib #適宜変更 ); PerlModule ServerAdmin SetHandler perl-script PerlHandler ServerAdmin
4・libディレクトリに移動しslege-setupを実行
# sledge-setup ServerAdmin
ServerAdminディレクトリが生成されます
5・ServerAdmin.pmファイルの作成(Sledge::Engine用)
lib/ServerAdmin.pm
package serverAdmin; use strict; use Sledge::Engine; __PACKAGE__->setup; 1; __END__
6・Charset.pmファイルの作成
デフォルトの文字コードがeuc-jpなので、
unflagged-utf8に変更する
lib/ServerAdmin/Charset.pm
package ServerAdmin::Charset; use strict; use base qw(Sledge::Charset::Null); sub content_type { return 'text/html; charset=UTF-8'; } 1; __END__
7・Pages.pmファイルの修正
今回作成するアプリケーション用にlib/ServerAdmin/Pages.pmを修正します。
7-1 sessionをmemcachedに変更
Sledge::Session::MySQLをSledge::Session::Memcachedに修正
7-2 charsetをServerAdmin::Charsetに変更
use ServerAdmin::Charset;を追加
Sledge::Charset::DefaultをServerAdmin::Charsetに変更
7-3 テンプレートの設定処理を追加する
useの最終行の下あたりに以下を追加
__PACKAGE__->register_hook( BEFORE_DISPATCH => sub { my $self = shift; my $config = $self->create_config; $self->tmpl->set_option( INCLUDE_PATH => [ $config->tmpl_path . '/include', #後でインクルードファイルを追加します ], ); }, );
BEFORE_DISPATCHにコードレフにてテンプレートオプションを指定することにより、
dispatch毎に同じ処理を書かなくて済むようになります。
8・lib/ServerAdmin/Config/_common.pmを修正
コンフィグファイルの中身を修正します。本来は_test.pmや_production.pmなど2つ用意して
ステージングと本番を自動的に読み替えるのですが今回は共通の_common.pmだけに記述します。
以下の項目を追加・修正します。
$C{TMPL_PATH} = '/var/www/serveradmin/view'; #テンプレートファイルのパスを指定します $C{DATASOURCE} = [ 'dbi:mysql:serveradmin','serveradmin', 'serveradmin' ]; #データべース名、user、passwdを指定します $C{COOKIE_NAME} = 'serveradmin_sid'; $C{MEMCACHE_SERVERS} = [ qw/ 127.0.0.1:11211 / ]; #memcachedのIP、ポート番号を指定します $C{SESSION_SERVERS} = $C{MEMCACHE_SERVERS};
9・テスト用にindexページを作成
lib/ServerAdmin/以下にPagesディレクトリを作成(このディレクトリ以下にコントローラを設置します)
Pages以下にRoot.pmファイルを作成。dispatch_indexが実際に実行されるメソッドになります。
lib/Pages/Root.pm
package ServerAdmin::Pages::Root; use strict; use base qw(ServerAdmin::Pages); __PACKAGE__->tmpl_dirname('/'); sub dispatch_index { my $self = shift; $self->tmpl->param(mes => 'hello'); #テンプレートに値を入れる } 1; __END__
10・indexページのテンプレートを作成
TemplateToolkit用のテンプレートファイルを作成します。
文法についてはこちらのページが参考になるでしょう。
view/index.html
[% PROCESS 'header.inc' %] [% mes %] [% PROCESS 'footer.inc' %]
11・テンプレートにincludeしているheaderとfooterを作成
view/includeディレクトリを作成しその中に設置する
/view/include/header.inc
<html> <head> <title>ServerAdmin</title> </head> <body>
/view/include/footer.inc
</body> </html>
12・apache、mod_perlを再起動する
エラーがでましたらmod_perlのエラーログを確認してみましょう。
問題なければブラウザでhttp://serveradmin.exsample.com/にアクセスすると
helloと表示されるはずです。
ざっと説明しましたが、まだ、実用的ではありません。
次回はDBを使用して、認証を行いサーバの管理情報を記録するまでを行いたいと思います。