Amon2のオレオレflavorを作った
作りました
背景
結構Amon2の使い方が固まってきた
amon2-setupしてからやることが大体同じになってきた
そこらへんも勝手にsetupしたいなー
flavor作れば解決するのでは?
作り方
こちらのサイトと、先人の方々がGithubに上げているflavorのソースコードを参考にしました。
使い方
完全にオレオレ仕様なので、使う方がいるか分かりませんが一応使い方を書いてみます。
まずは、取ってきてー
$ git clone https://github.com/akihiro0228/Amon2-Setup-Flavor-Aki.git
インストールしてー
$ cd Amon2::Setup::Flavor::Aki $ perl Makefile.PL $ make $ make install
最後に、setupします
$ amon2-setup.pl --flavor=Aki myApp
機能
簡単に挙げると以下のような仕様になっています。
- 全体的にシンプルな構造
- DBはmysqlを対象
- DBのpassとかをConfig::Pitで管理
- DBを簡単setup
- O/Rマッパーは"Teng"
- Model機能追加
- DateTime機能追加
- auto_render機能追加
- テスト実行は簡単に
全体的にシンプルな構造
前に書いた記事を参考にしながらサービス開発に必要なものだけを残していきました。
. ├── app.psgi ├── config ├── cpanfile ├── db ├── lib ├── script ├── static ├── t └── tmpl
起動するだけなら
$ carton insall $ carton exec plackup
でOK
DBはmysqlを対象
Basic-flavorではSQLiteがデフォルトですが、mysqlを利用することが多いのでそうしています。
もちろん別途mysqlのinstallをしておく必要があります。
DBのpassとかをConfig::Pitで管理
DBのpasswordやtwitterのAPI key等を設定ファイルにベタ書きすると、github等の公開リポジトリでは管理しづらいです。
なのでConfig::Pit
を使ってパスワード管理をすることにしました。
まずscript/pit.pl
を編集します。
use strict; use warnings; use Config::Pit; Config::Pit::set('sample.com', data => { database => 'DBI:mysql:sample:localhost:3306', username => 'user_name', password => 'password', }); Config::Pit::set('sample.com.test', data => { database => 'DBI:mysql:sample_test:localhost:3306', username => 'user_name', password => 'password', });
上が本番&開発用のDB設定。 下がテスト用のDB設定になります。
username
やpassword
を書いたら実行します。
$ carton exec perl script/pit.pl
これで設定は~/.pit以下にyaml形式で登録されます。
後は設定ファイルで読み込んで使います。
use strict; use warnings; use Config::Pit; my $config = pit_get('sample.com', require => { 'database' => 'hoge', 'username' => 'hoge', 'password' => 'hoge', }); return { DB => [ $config->{database}, $config->{username}, $config->{password}, ], };
DBを簡単setup
セットアップ用スクリプトで一発です。
$ sh script/db_setup.sh
セットアップされるテーブルのスキーマ構造等はdb以下で設定します。
DROP TABLE IF EXISTS user; CREATE TABLE IF NOT EXISTS user ( id INTEGER NOT NULL AUTO_INCREMENT, name VARCHAR(32) NOT NULL COMMENT "名前", created_at DATETIME DEFAULT NULL, updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id), UNIQUE (name) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT "ユーザー管理";
O/Rマッパーは"Teng"
これはBasic-flavor
そのままです。
Model機能追加
以下の記事で実装したものを利用しています。
追加としてData::Validatorを使っています。
DateTime機能追加
Amon2 contextからDateTimeオブジェクトを呼べるようにしました。
# 現在時刻 my $today = $c->dt->now(); # 年月日 $today->year; $today->month; $today->day; # YYYY-mm-dd $today->ymd;
こちらを参照しながら使いましょう。
auto_render機能追加
renderでtemplateファイルを指定するところを自動で選択するようにしたいと思ったので実装しました。
package sample::Web::App::C::Home; use strict; use warnings; use utf8; sub index { my ($class, $c) = @_; # $c->render('app/home/index.tx'); # さらに # 'static/js/app/home/index.js' # 'static/css/app/home/index.css' # を読み込むようになります return $c->auto_render; } 1;
これはauto_renderを実行しているモジュールのパッケージ名とメソッド名からpath作っています。
テスト実行は簡単に
テスト用スクリプトを準備しています。
$ sh script/test.sh
個別にもテスト実行出来ます。
$ sh script/test.sh t/00_compile.t
最後に
オレオレflavor作り楽しい。