Mojolicious::LiteでセッションストアにRedisを使ってIIJmioアプリを作る。

mio chang

mio chang

IIJmioのクーポンスイッチAPIを使用してアプリを作りました。APIの詳細は以下を参照してください。
サービス概要 – IIJmioクーポンスイッチAPI
作ったアプリ:mio chang Coupon Switcher

IIJmioクーポンスイッチAPIはOAuth2.0を使用しているのですが、MojoliciousのセッションはCookieで保持されていて、そのままだとサーバ側でセッションIDからstateを復元する仕組みが必要になるため、セッションストアにRedisを使うことにしました。
モジュールはMojoX::Session::Store::Redisを使用します。

Mojolicious::Lite側でのRedisの使用設定

plugin session => {
	stash_key => 'mojox-session',
	store	 => MojoX::Session::Store::Redis->new(
		{
			server  => '127.0.0.1:6379', #redisのポート番号。デフォルトは6379のはず。
			redis_prefix	=> 'mojo-session',
			redis_dbid	  => 0, #これは好みのIDで
		},
	),
};

セッション生成

my $self = shift;
my $session = $self->stash('mojox-session');
$session->load;
$session->create unless ($session->sid);

セッション情報書き込み・セッションの有効期限変更

expires_deltaとextend_expiresでハマりました。ペアで使わないとダメなんですね。

#値書き込み
$session->data( your_key => "value" );

#有効期限更新
$session->expires_delta(123456);
$session->extend_expires; #これを実行しないとデフォルト3600秒のままになる。expires_deltaの実行だけでいいと思っててハマりました。

セッション情報読み込み

my $sid = $session->sid; #session id
my $val = $session->data('your_key');

実際のスクリプトはgithubに載せておきます。
retrorocket/mio
Redis、使ってみたらものすごく勝手が良かったので積極的に使っていきたいです。

あと、UIにBootstrap Switchを使ってみたのですが、これもかなり良かったので今度紹介記事書きたいです。

redis-serverのバージョンをあげたらNot connected to any serverエラーが発生する。

本当はタイトルを「redis-serverのバージョンをあげたらMojoX::Session::Store::Redisを使用しているアプリケーションでNot connected to any serverエラーが発生する。」にしたかったのですが、あまりに長いので諦めました。
redis-serverのバージョンを2.8.17にあげたら上記の事象が発生。
$redis-cli PING でPONGが返ってきたので、hypnotoadでアプリケーションの方を再デプロイしたら解消しました。

Mojolicious::Liteでhypnotoadの設定を変更する。

hypnotoadの設定変更でちょくちょく検索されてる気がしたので、Mojolicious::Liteでの設定方法を載せておきます。

app->config(
	hypnotoad => {
		listen => ['http://*:8081'], #ポート番号
		user => 'userA', #hypnotoadの実行ユーザ
		group => 'groupA', #hypnotoadの実行グループ
	},
);

その他の設定値は以下。
Mojo::Server::Hypnotoad – ALL GLORY TO THE HYPNOTOAD!

お知らせ

2014/9/11の17:30 ~20:30にサーバメンテナンスがあるため、この期間内はページにアクセスできなくなります。
サーバメンテナンスの時にたまたまアクセスした方が、後日「自分がアクセスした時に応答なかったから、サービスごとなくなったと思ってた」ってツイートしていたことがあって、それを見てとても嫌な思いをしたので、メンテナンスが近くなったらページの上に警告出すようにしてたのですが、あほらしくなったのでやめました。
サーバが数時間止まっただけでサービスごとなくなったと思う人って、スーパーの棚卸しも許さないひとなんだろうなぁって思います。