Amon2の俺おれディレクトリ事情
Webアプリのディレクトリ事情 http://yusukebe.com/archives/20130130/183800.html
って記事を見てmojoじゃなくてamon2だけど以下のようになってる。
Amon2にはアプリ作成時にテンプレート的なひな形を作るflavorがあるけど、つくるのめんどいのでsedで置換してる
find . -type f | xargs sed -i 's/hoge/fuga/g'
ディレクトリとファイル
. ├── Build.PL ├── app.psgi ├── config │   ├── deployment.pl │   ├── development.pl │   └── test.pl ├── lib │   ├── MyApp │   │   ├── DB │   │   │   └── Schema.pm │   │   ├── Model │   │   │   └── User.pm │   │   ├── Web │   │   │   ├── C │   │   │   │   ├── Etc.pm │   │   │   │   └── Root.pm │   │   │   ├── Dispatcher.pm │   │   │   └── View.pm │   │   └── Web.pm │   └── MyApp.pm ├── log │   └── development_2013_02_01.log ├── script │   ├── make_db_schema.pl │   └── sed_replace_myapp.sh ├── sql │   ├── MyApp.sql │   ├── mysql.sql │   └── sqlite.sql ├── t │   ├── 00_compile.t │   ├── 01_root.t │   ├── 02_mech.t │   ├── 03_assets.t │   ├── 06_jslint.t │   └── Util.pm ├── template │   ├── index_garak.tt │   ├── index_pc.tt │   ├── index_smart.tt │   └── static │   ├── css │   ├── image │   └── javascript └── xt ├── 01_pod.t └── 02_perlcritic.t
大体同じようになるんじゃないかんとか思うんだけど、templateディレクトリにはText::Xslateテンプレートファイル群とテンプレ内で使う画像やcss,javascriptファイルが置いてある。 /template/index_pc.ttとか_pcはWeb.pmでユーザエージェント見て$c->{terminal}とかに入れて、コントローラで
$c->render('index_'.$c->{terminaml}.'.tt' => { ... }
みたいにしてる。
公開用ディレクトリ?ってのはこのディレクトリには置かない、公開するサーバ、アプリによって変わるので/config/development.pl /config/deployment.plにディレクトリのパスをかを書いてある。
├── lib │   ├── MyApp │   │   ├── DB │   │   │   └── Schema.pm │   │   ├── Model │   │   │   └── User.pm │   │   ├── Web │   │   │   ├── C │   │   │   │   ├── Etc.pm │   │   │   │   └── Root.pm │   │   │   ├── Dispatcher.pm │   │   │   └── View.pm │   │   └── Web.pm │   └── MyApp.pm
アプリ本体のlib内では大まかにDB、Schema.pmとかが入る(script/make_db_schema.plが書き出す)、Modelは肝心な部分、Webはウェブ用、dispatcher.pmでrouter::simpleでWeb/Cのコントローラに割り振る。
Web,pmではコントローラに渡す前の処理(セッションだとか、ユーザの処理とか、user_agentで振り分けるとか)と、渡した後の処理(headerとかいじるとか、stickqueryつけるとか)を行う。
MyApp.pmには$c->dbでdb使えるようにとか、$c->timepieceとかでtime::piece使えるようにとか、共有して使うような処理。 PLACK_ENVにてconfig/development.pl、config/deployment.pl、config/test.plを間違えないように現在のモードを表示する処理などがあり。
何がいいたいかというと、こうして書いてみるとすっきりするものですね。
追記:やっぱり端末毎に.psgi、コントローラ分けた方がすっきりするし、バグも減ると思う。 おなじアプリに携帯用stickquery付けたり結構めんどかったので、すっきりします。