onagatani
2010年04月20日
こんにちわ。onagataniです。
今回はMTの話題ではないのですが、最近進めている活動の宣伝を。
perlの勉強会などを行うグループを作りました。
サイト:http://perl-hokkaido.org
グループ:http://groups.google.com/group/perl-hokkaido?hl=ja
自分のブログにも書いたのですが、北海道でもPerlが活発に使われるようになって、
勉強会とか頻繁に行われるようになるとうれしいなと。
北海道在住の方もそうでない方もperlに興味があればgoogleグループに入って下さい。
自分もperlプログラマーとしてはまだまだなので、perl/プログラム初心者の方の入会歓迎です!
メンバーも順調に増えていますが、
たくさんの人と交流できるようにメンバーが増えると嬉しいです。
勉強会の日程はまだ決まっていませんが
サイトが完成次第、キックオフを行いたいと思っております。
みんなで北海道のperlを盛り上げましょう。
宜しくお願いします。
追記:perl-hokkaidoからHokkaido.pmに名称変更しました
onagatani
2009年10月06日
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::Engineのインストール
*事前にSledge本体のインストールは済ませおいて下さい。
*memcachedを使用するのでインストールを事前に済ませておいて下さい。
基本的にはcpan Sledge::Engineでインストールできると思います。
Sledge::Utilsでcpanがエラーになった場合にはSledge::Utilsをダウンロードして、
perl Makefile.pl
make install で直接インストールしてみてください。
再度cpan Sledge::Engineでインストールができるかと思います。
・追加でインストールするモジュール
これでやっと準備が整いました。
■アプリケーションの作成
今回は以下の設定でアプリケーションを作成してみたいと思います。
-
作るもの:サーバ管理用のツール
-
出来ること:サーバ情報を記録して一覧で閲覧できるようにする
-
プロジェクト名: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を使用して、認証を行いサーバの管理情報を記録するまでを行いたいと思います。
onagatani
2009年07月08日
onagataniです こんにちわ。 前回からずいぶん時間をあけてしまいましたが Perlの勧め第3回です。 今回から何回かに分けてSledgeというオープンソースのフレームワークを紹介したいと思います。 PerlのフレームワークというとCatalystがデファクトスタンダードな雰囲気ですが、 枯れてるもの大好きな自分はSledgeを紹介します。 *まぁ、単に他をよく知らないだけです。 なお、他にも沢山フレームワークがあるので最新のものがよければ Arkなども良いかもしれません。 まずは動作環境の設定を行いたいと思いますが、 自分の環境以外でどうなるのか自信がないのでw 自分と同じ環境を想定します。 OSとミドルウェアは ・CentOS5.2 ・perl5.8.8 ・apache2.2 ・apache1.3(mod_perl組み込み) ・memcached(セッションを格納する) ・mysql5 なぜapacheが2つ必要なのかですが、 mod_perlのデメリットしてプロセスが肥大化してしまう事があげられます。 なので動的な出力以外は通常のapacheにお願いして、 動的な処理だけapache(mod_perl組み込み)で処理しようという魂胆です。 perl、apache2、mysqlについてはyumで最新版をinstallしておきます。 memcachedについてはdag経由でyumでinstallできます。 残りのapache1.3+mod_perlのinstallを手順を追って説明します。 1・apacheの1系最新版をダウンロードする wget http://httpd.apache.org/download.cgi tar zxvf apache_1.3.41.tar.gz 2・mod_perlの最新版をダウンロードする http://perl.apache.org/dist/ tar zxvf mod_perl-1.31.tar.gz 3・mod_perlインストール cd /path/to/mod_perl-1.3.1 perl Makefile.PL \ EVERYTHING=1 \ APACHE_SRC=/path/to/apache_1.3.41/src \ USE_APACI=1 \ PREP_HTTPD=1 \ DO_HTTPD=1 make make install 4・apacheのインストール cd /path/to/apache_1.3.41 ln -s src/modules/perl/libperl.module src/modules/perl/libperl.a ./configure --with-layout=Apache \ --target=mod_perl \ --prefix=/path/to/mod_perl \ --enable-module=so \ --activate-module=src/modules/perl/libperl.a --enable-module=perl make make install 5・念のためApache::Request入れる cpan Apache::Request apxsのパス訊かれたら /path/to/mod_perl/bin/apxs 6・最後に apache1.3のconfを修正します keepaliveはoff、port番号も8080番なりに変更します。 プロセス数はメモリの許す限りで調整します。 /path/to/mod_perl/bin/mod_perlctl start で起動確認 ちょっと長くなったので今回はここまでとします。 肝心のSledgeの説明ができていないですが まずは環境整備からとおうことでw 次回はSledgeのinstallを紹介したいと思います。