Catalyst

catalystでParsing of undecoded UTF-8 will give garbage when decoding entities atとか出るのを止める

Parsing of undecoded UTF-8 will give garbage when decoding entities atとか出るのは、ググったらHTML::Parserのバグらしい。 不要なので止める。 HTML::FillInFormを編集。174行目くらい。 % vi HTML::FillInForm if(my $file = $option{file}){ $self->…

Catalystで何故か特殊変数$1と$2が最初から使われている

正規表現で処理してたら気がついた。何故かCatalystアプリの中では、何もせずともマッチ変数の$1と$2に値が入っている。 必要な部分だけ抜粋 use Data::Dumper; sub p {warn Dumper shift} sub auto :Private { my ( $self, $c ) = @_; p $1; p $&; p $`; p …

セッションの保持

今までノリで Catalyst::Plugin::Session Catalyst::Plugin::Session::Store::DBIC Catalyst::Plugin::Session::State::Cookie を使ってきてて、たまに Catalyst::Plugin::Session::Store::FastMmap を使ってた。 特に何も考えずやってたけど、webサーバが複…

最近のcatalyst構成

MyApp ├─bin / *.pl *.sh 主にcron用 ├─db ├─t ├─root │ └─static │ ├─css │ ├─js │ ├─images │ └─template ├─lib │ └─MyApp │ ├─Controller │ ├─Model │ ├─Schema / make_schema_atでダンプしたファイル │ └─View ├─config │ ├─app / myapp.yaml myapp_deve…

catalystの中でテンプレからhtml生成するときゃTemplateじゃなくて$c->view('TT')を使う

別にどっちでもいい気がするといえばするけれど。 テンプレートからファイルを出力したい場合、普通はTemplate->newするけど、Catalystアプリの中でそれをやりたくて、viewにCatalyst::View::TTを使ってる場合、Templateを使わずに済む。 柔道家に教えてもら…

ファイルアップロード時のFirefoxとIEの違い

別にハマらんけど。 フォームからファイルをアップしたとき、ブラウザによって処理を変える必要がある。 以下、理由。 die Dumper $c->req->param('hoge'); 結果 ■Firefox "$VAR1 = 'file.gif';"■IE "$VAR1 = 'Z:\\TEMP\\file.gif';"というわけで。 結論 IE…

Catalyst::View::TTが入らない

そう、何故か入らない。CentOS5.2でこんなの初めてだ。 cpan[19]> install Catalyst::Devel Catalyst::Devel is up to date (1.08). cpan[20]> install Task::Catalyst Task::Catalyst is up to date (3.0000).なくせしてC::View::TTはエラー。仕方ないので…

cronの用意の仕方

普通はスクリプト用意して、そいつをperl hoge.plとかしてやるんだろう。 Catalystのメソッドにcronにさせたい処理を書いて、そいつを wget -O /dev/null http://service/cronしてやるってのは頭悪いのかなー? メソッド外部公開とか馬鹿なの?死ぬの? いや…

DBICでトランザクション処理

複数のCRUDを行うとき、例えば100件のデータをinesrtするとき。20件までは成功したけど、残り80件はなんかプログラムエラーで入らなかった、なんてことになったら困るので、一連の処理が全て成功して初めてDBにコミットする、てゆーのがトランザクション。 …

リバースプロキシしてるのに何故リモートホストが取れるのか

普通リバースプロキシすると、リモートホストが127.0.0.1とかになる。 リモートホストはX-Forwarded-Forに入るのに。 でもCatalystの$c->req->addressはちゃんとリモートホストを返してくれる。 何故か。はい神が解説してくれました。 /usr/lib/perl5/site_p…

起動しねえ

以前どっかで見た。catalystのテストスクリプトが起動しないときはいいからMakefile.PLを置け

autoではtrueを返せっつってんだろ!

faviconの用意の仕方がクレイジーすぎる

神から教えてもらった。 catalyst.plとか打って、デフォルトで用意されるfaviconさん。どっかに元ファイルがあって、それをコピーしてるだけなんだろうなと思ってた。ら… sub _mk_favicon { my $self = shift; my $root = $self->{root}; my $hex = $self->g…

Catalystで作ったWebアプリをApacheで動かしててベーシック認証かけたいときゃー

DirectoryじゃなくてLocationで指定しよう

FormValidator::SimpleでRegex

バリデーションで正規表現使うとき、ymlに書いてるときにちとつまづいた。 []で範囲指定する場合、qr//全体を更にシングルコーテーションでくくらなければならない。 ['NOT_BLANK', ['REGEX', 'qr/[1-9]/']] いずれは何故これが正しいのか、こうすれば正しい…

Catalystで作ったアプリをApacheで動かす。ウン難しい。初めてやったときゃ何もわからなかった。 でもググればなんとかなってた。穴だらけだったけど 作ってる最中のアプリをApacheで動かしてたところ、普通に動いてたのが、新しくモジュール入れたら Can't …

FillinForm

フォームに入力>大人の事情でもう一度同じ画面に戻ってきた>さっきの入力値をフォームに保管してくれる という素敵なもの。常識っつったって知らなかったんだよー sub end : ActionClass('RenderView') { my ( $self, $c ) = @_; if( $c->req->param) { $c…

妙なエラー

普通は-Debug付けてれば理由言いながら死んでくれるが、「セグメンテーション違反です」と言って唐突に死なれた。 consoleのログに何も残さず死ぬってのも初めて見た。しかも確実に前まで動いてて、そこらには決して触れてない場所で。 何やっても解決しない…

またFormValidatorか

用意されてないバリデーション条件を作るときはとりあえずset_invalid_formでぐぐれ実装はしたけどコードが手元に無いから思い出せないっていうね… ネットから分断されたら何もできないなー俺。

FormValidator::Simpleでエラーメッセージが出ないときは

「間違ってないはずなのに正しく動かない」という、よくあるパターン。 とりあえず全項目にBLANKだけかけて、それ用のメッセージだけ指定した。 そんでバリデーションした結果、全項目BLANKにはひっかかっているものの、エラーメッセージは1項目しか出ない。…

c->req->paramに追加

ハッシュリファレンスだっては分かってたけど値追加にえらい苦労したのは内緒だ $c->req->param('created_at' => $created_at); というかググったらヒットしたので速攻グーグルブックマーク

Authentication::Store::DBICを使うとき

アホかということにハマった。 ロードするときに先にConfigLoaderを書くのは知っていたが、ymlかアプリクラスでconfig書いてないとエラーになるとは。 しかもConfigLoaderを後に書いたときに出るのと同じ文言だからタチが悪い。 よく最初使ったときにはまら…

parsing error

とか出るときはymlか何かの文字コードが狂ったかもしれない。 他所で動いてるコードを自分の環境で動かすために編集した、とかね

インストールメモ。さすがに3回もすりゃ忘れんだろうけど。 install Task::Catalyst install Catalyst install Catalyst::Devel