Catalyst

1台のマシン上で複数のアプリを動かすときのこととか

http://yusukebe.com/archives/09/05/02/212113.html で「apache + mod_perlだと同じメモリ上にモジュールを読み込むからメモリ効率が悪いけど、lighttpd + fastcgiだとアプリごとに起動するからそんなことは無くなる」ってあったけど、アプリ1とアプリ2で別…

Re:JPAセミナーに参加してきた - だるろぐ

http://b.hatena.ne.jp/entry/http://d.hatena.ne.jp/foosin/20090423/1240504868 vkgtaro URI != Action という見地から行くと :Local はイケてないということだろうか。 えー、資料を用いて説明します。むしろほぼ資料ままです。引用という名の手動コピペ…

Test::WWW::Mechanize::Catalyst の get_ok がcatalystアプリのuriしか見に行かない説

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の / を見に行って…

Test::WWW::Mechanize::Catalystが”HTTP::Message content must be bytes”とか言ってくるとき

http://d.hatena.ne.jp/goryugo/20090222/1235237948 こちら↑ではWWW::Mechanizeが文句言ってきたときはHTTP::Request::Commonに手を加えたとのことだけど、俺がTest::WWW::Mechanize::Catalystで同じ事言われた場合はそれやっても駄目だったのでこうします…

$c->stashの書き方を効率的にしよう

catalystアプリのソースで、よくこういうのを見る。 $c->stash->{hoge} = $hoge; $c->stash->{huga} = $huga; $c->stash->{fooo} = $fooo; これはこう書ける。 $c->stash( hoge => $hoge, huga => $huga, fooo => $fooo, ); ずっと前に神から教えてもらった…

MyApp::Webの名前空間使用時にConfigLoaderにLOCAL SUFFIX渡すときの注意点

NIGET_CONFIG_LOCAL_SUFFIX='development'ではなく NIGET_WEB_CONFIG_LOCAL_SUFFIX='development'としなければいけない。 Catalyst::Plugin::ConfigLoaderとCatalyst::Utilsのソース読んで分かった。 1年前の俺ならロクに調べもせず神に聞いてた。多分何を調…

catalystのサンプルアプリとソースを公開してみる

モダンPerl入門を読んで色々勉強したので、サンプルアプリを作って自宅サーバで公開してみる。 http://niget.net/ ソースはgithubで晒し中。 http://github.com/hirafoo/niget/tree/master 誰かの参考になったり、disられたり、あれこれ議論したり、何かが起…

$c->modelを使わないことにした

外部スクリプトからAPIが使えるってことは当然catalyst内からも呼べるわけで。 $cに依存してるメソッドを使う理由が無い。 というわけでモデルの呼び方をテストスクリプト、CLI、Webとで共通化しようとしてる。 テストスクリプトとCLI用プログラムとWebとで…

Catalyst::View::Email::Templateが空気を読まない件

Catalyst::Plugin::EmailからCatalyst::View::Email::Templateに乗り換えようとした。 どうでもいいが、中の人はCatalyst::Plugin排斥より、デフォルトで$cに依存しないでモデル呼べるようにするのが先じゃねーのと思う。 んでこのCatalyst::View::Email::Te…

毎回use strict/warnings書くのがめどい

MooseやMouseはuseするだけで、use strict/warningsしたことになる。 便利だなーパクろうと思ってMooseを見る。分からなかったのでMouseを見る。分かった。 package Hoge; use strict; use warnings; sub import { strict->import; warnings->import; } 1; …

catalystでモデル分離が落ち着いた。その上でUser->find_by(id => 2)とかしてみた

いつまでモデル分離やってんだよって感じですが。 色々問題も解決していい感じに落ち着いた。 APIがDBICのCRUDなメソッドが呼べなかった件 流れ モデルを分離するためにAPIを作ろう $c->model('API::User')でAPIが呼ばれるようにしよう モデルを呼ぶのにweb…

#catalyst-jaで質問してきた

perlのえらい人が集まる#catalyst-jaで質問してきた。 ここからどうでもいい話( ・∀・) そもそも#catalyst-jaって何 freenode上に存在するcatalystな人が集まるチャンネル。catalystについて調べてるうちに知った。 最初はfreenodeという単語すら知らなか…

モデル分離したはいいけど$c->model('DBIC::User')はどー使おう

モデルを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 で作ったあとでパッケージ名書き換えたりファイル移動したりしたのがまず…

モダンPerl入門方式にしたらyamlの設定が読めなくなって困ってるので正直助けて欲しい件

MyApp直下にControllerとModelとViewがあるいつもの形式から、モダンPerl入門に従って、MyApp/Webを作ってその下にControllerとModelとViewを移したら、yamlに書いた設定が読めなくなってスクリプトサーバすら起動しなくて涙目になってる。テスト自動化とい…

catalystでMVCでモデル分離オレオレまとめ

出来の悪い人が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::CSV作ったらView::TTを読みにいかなくなった

これまでは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で定数をどうやって持たせよう

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 …

catalystでセッションストアにmemcached使った

相も変わらずレベル低い。これからだこれから とりあえず最低限の使い方。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::…

FormValidator::SimpleのDBIC_UNIQUE

超今更なんですけどね。 入力値がDB内でユニークかどうかチェックするよーってなあれ。色んなケースがあるけど、例えば今DBに入ってる自分のメアドをユニークにするとしよう。 自分の名前だけ更新したとき、メアドはそのまま。が、DB内に既に自分のメアドは…

FormValidator::Simpleでエラーったときにエラーった項目と、エラーったチェック項目を見る

毎度忘れてperldoc打ってる成長しない俺ガイル 以前コントローラでエラーった項目書いたので、その先のエラーったチェック項目(BLANKだのLENGTHだの)をビューでttで見よう。 [%- IF c.form.has_error -%] [%- FOREACH key IN c.form.error %] <p>[% key %] に</p>…

catalystとrailsにおいて同一メソッドでpost/getで処理を分ける場合

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ってわけじゃないけど…

Catalyst::Plugin::Authenticationの新しい版

複数の認証条件が使えるようになってた。 認証方法1:mail_addressとpassword 認証方法2:serialとpassword みたいな。 例えばUserテーブルに持ってる情報で認証するサンプル。 設定 authentication: default_realm: use_mail realms: use_mail: credential:…

template toolkitでWRAPPERするファイルをデフォルトで定義したり条件によって別のファイルを指定したりする

before header.ttに <html> 〜〜〜〜〜〜〜〜 </html>

今度はDBICでUser->find_by('age', 1)とかUser->find_all_by('user_id', 1)とかやってみた

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_id(1)とかやってみた

追記 改良版書きました 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(…