Perlの勧め(4) Sledgeを使おう2

onagatani 2009年10月06日

パワフルなCMSを98,000円で。

Movable Typeで承認フロー、会員サイト構築ができます。

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 : 10/06

Movable Typeを利用したウェブサイト開発はお任せください!

100の企業が認めた成功へ導くCMS構築

スカイアークは創業以来6年間、Movable Typeを一貫して活用し、お客様の様々なウェブサイトをCMS化しました。MTを利用したウェブサイトはスカイアークにお任せください。

MT・CMS構築について詳しく見る

お問い合わせはこちらから お電話でのお問い合わせ03-5475-5101

MTエンジニアブログ

MTCMS Smartキャンペーン!
承認フロー付きCMS「MTCMS Smart(98,000円)」をお買い上げの方、MTライセンス1本がタダに!

配布プラグイン一覧

MultiFileUploader
複数ファイルを一括でアップロードできるMovable Typeプラグイン
ParentalInclude
MT5でウェブサイトとブログのテンプレート連携を便利にするプラグイン
DuplicateEntry
ブログ記事を複製または移動するMovableTypeプラグイン
NotifyAnythingChanged
何かが起きたらメールで通知するMovableTypeプラグイン
rssEntry
取込んだRSSをエントリとして書き出すMovableTypeプラグイン
AutoTagging
面倒な記事のタグ付けを自動化する
FutureRebuild
日時を指定してページを再構築する
EntryImExporter
エントリをCSVに書出したり、CSVから一括登録するMovableTypeプラグイン
MailPack
Movable Typeで簡単携帯投稿!メール投稿プラグイン
DirectoryUtility
カテゴリ・フォルダの階層を表示したり、親フォルダを表示したり、何かと便利なプラグイン
CSVList
CSVデータを整形して表示する
PageBute
静的ページ用ページ分割プラグイン

注目記事

RSS

ページの先頭へ戻る