Catalyst
http://yusukebe.com/archives/09/05/02/212113.html で「apache + mod_perlだと同じメモリ上にモジュールを読み込むからメモリ効率が悪いけど、lighttpd + fastcgiだとアプリごとに起動するからそんなことは無くなる」ってあったけど、アプリ1とアプリ2で別…
http://b.hatena.ne.jp/entry/http://d.hatena.ne.jp/foosin/20090423/1240504868 vkgtaro URI != Action という見地から行くと :Local はイケてないということだろうか。 えー、資料を用いて説明します。むしろほぼ資料ままです。引用という名の手動コピペ…
use Test::WWW::Mechanize::Catalyst 'Niget::Web'; my $mech = Test::WWW::Mechanize::Catalyst->new(catalyst_app => 'Niget::Web'); $mech->get_ok("http://google.co.jp/"); これがokになっても p $mech->content; で見ると、何かnigetの / を見に行って…
http://d.hatena.ne.jp/goryugo/20090222/1235237948 こちら↑ではWWW::Mechanizeが文句言ってきたときはHTTP::Request::Commonに手を加えたとのことだけど、俺がTest::WWW::Mechanize::Catalystで同じ事言われた場合はそれやっても駄目だったのでこうします…
catalystアプリのソースで、よくこういうのを見る。 $c->stash->{hoge} = $hoge; $c->stash->{huga} = $huga; $c->stash->{fooo} = $fooo; これはこう書ける。 $c->stash( hoge => $hoge, huga => $huga, fooo => $fooo, ); ずっと前に神から教えてもらった…
NIGET_CONFIG_LOCAL_SUFFIX='development'ではなく NIGET_WEB_CONFIG_LOCAL_SUFFIX='development'としなければいけない。 Catalyst::Plugin::ConfigLoaderとCatalyst::Utilsのソース読んで分かった。 1年前の俺ならロクに調べもせず神に聞いてた。多分何を調…
モダンPerl入門を読んで色々勉強したので、サンプルアプリを作って自宅サーバで公開してみる。 http://niget.net/ ソースはgithubで晒し中。 http://github.com/hirafoo/niget/tree/master 誰かの参考になったり、disられたり、あれこれ議論したり、何かが起…
外部スクリプトからAPIが使えるってことは当然catalyst内からも呼べるわけで。 $cに依存してるメソッドを使う理由が無い。 というわけでモデルの呼び方をテストスクリプト、CLI、Webとで共通化しようとしてる。 テストスクリプトとCLI用プログラムとWebとで…
Catalyst::Plugin::EmailからCatalyst::View::Email::Templateに乗り換えようとした。 どうでもいいが、中の人はCatalyst::Plugin排斥より、デフォルトで$cに依存しないでモデル呼べるようにするのが先じゃねーのと思う。 んでこのCatalyst::View::Email::Te…
MooseやMouseはuseするだけで、use strict/warningsしたことになる。 便利だなーパクろうと思ってMooseを見る。分からなかったのでMouseを見る。分かった。 package Hoge; use strict; use warnings; sub import { strict->import; warnings->import; } 1; …
いつまでモデル分離やってんだよって感じですが。 色々問題も解決していい感じに落ち着いた。 APIがDBICのCRUDなメソッドが呼べなかった件 流れ モデルを分離するためにAPIを作ろう $c->model('API::User')でAPIが呼ばれるようにしよう モデルを呼ぶのにweb…
perlのえらい人が集まる#catalyst-jaで質問してきた。 ここからどうでもいい話( ・∀・) そもそも#catalyst-jaって何 freenode上に存在するcatalystな人が集まるチャンネル。catalystについて調べてるうちに知った。 最初はfreenodeという単語すら知らなか…
モデルをAPIに分離したら、$c->model('API::User')は当然CRUDなんて出来るわけ無いから、コントローラかAPIでDBICが使えるオブジェクトを作ってやらんといけない。 コントローラ側で作る場合 $c->model('API::User')->method( $c->model('DBIC::User') ); AP…
なんつうかろくなタイトルが思いつかないのはいつものことで。 catalystのMVCが駄目な理由 モデルを呼ぶのに$cというwebのコンテキストを通してしか得られないオブジェクトを使わなければいけないから。 そりゃコントローラにべったりになるし、テストも書け…
今日も今日とて。 MyApp::Web作ったらconfig読めなくなったーって喚いてたら昨日(むしろ今日の午前4時)に神からコメントで原因を教えてもらう。 プロジェクトを catalyst.pl MyApp で作ったあとでパッケージ名書き換えたりファイル移動したりしたのがまず…
MyApp直下にControllerとModelとViewがあるいつもの形式から、モダンPerl入門に従って、MyApp/Webを作ってその下にControllerとModelとViewを移したら、yamlに書いた設定が読めなくなってスクリプトサーバすら起動しなくて涙目になってる。テスト自動化とい…
出来の悪い人がCatalystでモデル分離を勉強した仮まとめ。 嘘、大げさ、紛らわしいことが入り乱れてます。 何故皆モデルをコントローラから分離しろ、コントローラにロジックを書くなと言うのか catalystではコントローラで$cが使えるが、これはuriリクエス…
手を抜いたモデル分離 - だるろぐ跡地を柔道家に相談。 ・例えばwebコンテキストとcliの両方からユーザ登録するときにロジック一箇所に統一できないじゃん ・スキーマにロジックっておかしくね ・テーブルまたぐ処理どこに書くの 色々勉強になった。
MyApp::Webとか::APIとか::CLIとか作らないで モデル触れてテストも出来てかつcliからも触れればいいならこんなんでもいいのだろうか アプリ名 AutoTest Userモデル sub create_user { my ($self, $args) = @_; if ( validate_name($args->{name}) ) { $self…
これまではViewはMyApp::View::TTしか作ったことが無かった。csv出力することになったので、 package MyApp::View::CSV; use strict; use base 'Catalyst::View::Download::CSV'; 1; を作ったところ、MyApp::View::TTのprocessにいかなくなった。 多分、明示…
webをうろついてると、MyApp::SchemaとかMyApp::Model::DBICとかにDBのアドレスをべたっと書いてる人が多いんだけど、開発環境と本番環境が同じなんだろうか?サンプルで書いてるだけ? うちではmyapp_devel.yamlとmyapp_production.yamlを用意してCatalyst:…
catalystで定数の扱い方に悩む。簡単なのはuse constantだが、 package MyApp::Constant; use strict; use warnings; use base "Exporter"; our @EXPORT = qw/ SCA ARR HAS /; use constant SCA => 'hoge'; use constant ARR => qw/hoge huga foo bar/; use …
相も変わらずレベル低い。これからだこれから とりあえず最低限の使い方。SYNOPSIS真似ただけ。 myapp.yaml session: memcached_new_args: data: - '127.0.0.1:11211' MyApp.pm use Catalyst qw/ -Debug Session Session::Store::Memcached Session::State::…
超今更なんですけどね。 入力値がDB内でユニークかどうかチェックするよーってなあれ。色んなケースがあるけど、例えば今DBに入ってる自分のメアドをユニークにするとしよう。 自分の名前だけ更新したとき、メアドはそのまま。が、DB内に既に自分のメアドは…
毎度忘れてperldoc打ってる成長しない俺ガイル 以前コントローラでエラーった項目書いたので、その先のエラーったチェック項目(BLANKだのLENGTHだの)をビューでttで見よう。 [%- IF c.form.has_error -%] [%- FOREACH key IN c.form.error %] <p>[% key %] に</p>…
catalyst sub login :Local { my ($self, $c) = @_; if ($c->req->method eq 'POST') { warn "post !" } else { warn "get !" } } rails def login if request.post? p "post !" else p "get !" end end いや、postじゃないなら必ずgetってわけじゃないけど…
複数の認証条件が使えるようになってた。 認証方法1:mail_addressとpassword 認証方法2:serialとpassword みたいな。 例えばUserテーブルに持ってる情報で認証するサンプル。 設定 authentication: default_realm: use_mail realms: use_mail: credential:…
before header.ttに <html> 〜〜〜〜〜〜〜〜 </html>
DBICでUser->find_by_id(1)とかやってみたのブランチだか改良みたいな。 after # 検索結果は1件 my $user_a = User->find(3); # select 〜 where user.id = 3 my $user_b = User->find_by('age', 3); # select 〜 where user.age = 3 # 検索結果はn件 my $bo…
追記 改良版書きました DBICでUser->find_by('age', 1)とかUser->find_all_by('user_id', 1)とかやってみた catalystアプリの中で、DBICを使ってDBに問い合わせする部分をActiveRecordっぽくしてみた。 before my $user = $c->model('DBIC::Users')->search(…