鈍足ランナーのIT日記

走るのが好きな5流のITエンジニアのブログ。

趣味の範囲は広いけど、どれも中途半端なクソブロガー楽しめるWebアプリを作ってあっと言わせたい。サーバーサイドPerl(Mojolicious)、クライアントサイドVue.js。Arduinoにも触手を伸ばす予定。

Mojolicious4.0からセッションを使うをていねいに

私のMojoliciousディレクトリ構成はこんな感じ

|-- hogehoge_web.conf
|-- hogehoge_web.psgi
|-- lib
|   `-- HogeHoge
|       |-- DB
|       |   `-- Schema.pm
|       |-- DB.pm
|       |-- Web
|       |   |-- Root.pm
|       |   `-- Route.pm
|       `-- Web.pm
|-- log
|   `-- development.log
|-- public
|   |-- css
|   |   |-- bootstrap.min.css
|   |   `-- bootstrap-custom.css
|   |-- img
|   |   |-- glyphicons-halflings.png
|   |   `-- glyphicons-halflings-white.png
|   `-- js
|       `-- bootstrap.min.js
|-- run
|-- script
|   `-- hogehoge_web
|-- sql
|   `-- create.sql
|-- t
|   `-- basic.t
`-- templates
    |-- layouts
    |   `-- bootstrap.html.ep
    `-- root
        `-- index.html.ep

つまり、開発機の起動はこんな感じで

morbo script/hogehoge_web

本番機はrunに実行権限を与え、runの中で、plackupを呼び出し、引数でpsgiファイルを指定しています。

開発機でMojoliciousのセッションを使う

まずは、shibayu36さんのMojoliciousでPlack::Middlewareを使う を参照して、起動用スクリプトをscript配下にrunと名前をつけて置いた。

$ENV{MOJO_APP} ||= 'Sample';
↓(ここを書き換えた)
#$ENV{MOJO_APP} ||= 'Sample';

enable 'CSRFBlock';    
Mojolicious::Commands->start;
↓(ここを書き換えた)
#enable 'CSRFBlock';
Mojolicious::Commands->start_app('HogeHoge::Web');

CSRFBlockは、セキュリティ関連の設定だとおもうんですが、 おそらく、Mojoliciousで追加のモジュールをインストールしていないと ブロックされてしまうのではないかな。ここは、要勉強。とりあえず はずしておかないと、ブロックされてしまうので・・・

本番機でMojoliciousのセッションを使う

psgiファイルでの設定方法はゆーすけべーさんの方を参照 PerlのWAFはMojolicious推しな件とそのノウハウ hogehoge_web.psgiを編集して、

builerの中に以下を足してあげれば動くかな。

enable 'Session', store => 'File';

Mojoliciousの中のコード

コントローラの中で、ゆーすけべーさんのような感じでソースをかけば 、開発機も本番機も動くはず?

my $self = shift;
my $session = Plack::Session->new( $self->req->env );
my $access_token = $session->get('access_token');
my $access_secret = $session->get('access_secret');

モジュールのインストール方法

cpanm Plack::Builder

cpanm Plack::Middleware::Session cpanm Plack::Middleware::CSRFBlock

cygwinではTest::TCPのテストが通らなかった

cpanm Test::TCP --notest

開発機の起動方法

いつもmorbo使っていたので起動方法がわからなかった!これで起動できた。

plack script/run