あたらしものずきっ!

試してみたものとか、遊んでみたものを色々記してみます。

Amon2::Lite + dotcloudな開発の今のところメモ

時間があるうちに、色々ためてたものを一気に作ってしまうのと、なるだけお金を使わない生活ということで只管コードを書いてます。

わりとハマりがちかなーと思える部分と、ちょっとゴージャスに作り込みをした部分を、自分用メモ兼ねて。

403ページを贅沢にする

ナビゲーションを入れたかったのでテコ入れ。

# load plugins
__PACKAGE__->load_plugin('Web::CSRFDefender', { no_validate_hook => 1 });

__PACKAGE__->add_trigger(
    BEFORE_DISPATCH => sub {
        my $c = shift;
        if (not $c->validate_csrf()) {
            my $contents = $c->render('session_lost.html')->body;
            return $c->create_response(
                403,
                [
                    'Content-Type'   => 'text/html',
                    'Content-Length' => length($contents),
                ],
                $contents
            );
        } else {
            return;
        }
    }
);

Amon2::Plugin::Web::CSRFDefenderにno_validate_hookを渡して、デフォルトで実行される403ページ生成部分を飛ばす。あとはapp.psgiに403ページ生成処理を差し込むだけ。

session storeを変える

Dotcloudのsessionが頻繁に切れてしまう場合の対応。

__PACKAGE__->enable_session( store => 'File' );

sessionが頻繁に切れてcsrf_tokenが常時空に近い状態になり、フォーム入力がままならなかったのが、これで緩和。

文字コード指定

typoなのか、この形に簡略表記できるのか、はっきりとは分からなかったので蛇足かもしれない。

- <met charst="utf-8">
+ <meta charset="utf-8">

こうすると、文字化けするケースに対応できた。