Hatena::ブログ(Diary)

Scrapcode@はてなダイアリー このページをアンテナに追加 RSSフィード

2009-06-24

NanoAでモバイルサイト(1)

ちょっと作りたいモバイルサイトがあったので、今更な感じがしますがNanoAを使ってみます。

設置環境

インストール

sshサーバーログインし、配布サイトからnanoa-0.16.tar.gzをwgetで取得し、展開します。

mkdir -p ~/www/www.example.com/nanoa
cd ~/www/www.example.com/nanoa
wget http://kazuho.31tools.com/nanoa/dist/nanoa-0.16.tar.gz
tar xvzf nanoa-0.16.tar.gz

nph-nanoa-X.XX-installer.cgiを使わなかった事に、特に意味はありません。

use lib

ユーザー権限でインストール済みのCPANモジュールがあるので、これを使えるようにnanoa.cgiにuse libを追加しておきます。

環境変数で指定できるのであればPERL5LIBを使いたいところですが、さくらレンタルサーバーでは.htaccessのSetEnvを書けないのでuse libを使います。

例:

#! /usr/bin/env perl

use lib qw{
    /home/***/local/lib/perl5/site_perl/5.8.9/mach
    /home/***/local/lib/perl5/5.8.9/mach
    /home/***/local/lib/perl5/site_perl/5.8.9
    /home/***/local/lib/perl5/5.8.9
    /home/***/local/lib/perl5/i386-freebsd-64int
    /home/***/local/lib/perl5
};

HTML::AutoFormのアップデート

nanoa-0.16付属のHTML::AutoFormは少し古いので、SVN webのファイルで置き換えました。

先ほどnanoa-0.16.tar.gzを展開したディレクトリにいるとして、次のコマンドを実行しました。subversionインストールされていることが前提です。

svn export http://svn.coderepos.org/share/lang/perl/HTML-AutoForm/trunk/lib/HTML autoform
rm -rf extlib/HTML/AutoForm*
mv autoform/* extlib/HTML/
rmdir autoform

変更点

以下の点は、変更が必要だと思います。

NanoA::uri_escape (nanoa.cgi)

utf8フラグがついたままescape処理をするとマルチバイト文字が正しくescapeされないので、フラグ処理を追加します。

sub uri_escape {
    my $s = shift;
    utf8::encode( $s ) if utf8::is_utf8( $s );  #  utf8フラグが付いていれば外す
    $s = join(   # 直接returnせず、一旦変数に代入
        '',
        map {
            /^[a-zA-Z0-9_.!~*'()-]$/ ? $_ : '%' . uc(unpack('H2', $_))
        } split(//, $s),
    );

    utf8::decode( $s );  # 一応utf8フラグを付ける
    return $s;
}
plugin::session (app/plugin/session.pm)

他でも書かれていますが、NanoA ver.0.16に付属のplugin::sessionがさくらレンタルサーバーではエラーになります。

なので、エラーになるapp/plugin/session.pmのNanoA::session()の該当部分をver.0.15を見て書き換えます。

#       request => bless(\do { "" }, 'plugin::session::request'),  # ← コメントアウト
        request => $app->query,  # 代わりに追加

動作確認

http://www.example.com/nanoa/ にブラウザでアクセスすると、初期設定の画面が表示されます。

ここでちょっとHTMLソースを見てみると…「パスワード(確認)」のところが

<input class="nanoa_form_field_password" custom="CODE(0x82f3470)" name="password2" type="password" />

のようになっています。「custom="CODE(0x82f3470)"」という変な属性がついてしまっているので、これを消すためにextlib/HTML/AutoForm.pmを編集します。

「sub _build_element」を探して、

! exists $omit->{$_} && ! /^(allow_multiple|label|required|xhtml_compat)$/

となっているところを、正規表現の末尾の方に「|custom」を追加して、

! exists $omit->{$_} && ! /^(allow_multiple|label|required|xhtml_compat|custom)$/

に変更します。

これで、「custom="CODE(0x82f3470)"」は消えました。

…と、ここまでで先ずはnanoaの設置についてでした。

次回以降、続きを書きたいと思ってますが…いつになるかは不明です。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/khashi/20090624/1245838451