Home > perl > catalyst Archive
catalyst Archive
C::P::FormValidator::Simple のバグ
久々に環境を再構築してたところ Catalyst アプリへ全くアクセスできなくて焦った。
$ ./myapp_server.pl
〜中略〜
[info] MyApp powered by Catalyst 5.80024
You can connect to your server at http://xerxes-linux:3000
[info] *** Request 1 (0.062/s) [30044] [Thu Jun 17 18:50:08 2010] ***
[debug] "GET" request for "/" from "192.168.30.60"
[debug] Path is "/"
[error] Caught exception in engine "Can't use string ("MyApp") as a HASH ref while "strict refs" in use at /usr/local/lib/perl5/site_perl/5.12.1/Catalyst/Plugin/FormValidator/Simple.pm line 36."
何これ……? エラーメッセージを色々切り分けてググったり、果ては Apache や mod_perl の問題かと思ってコンパイルしまくったけど全然関係なかった。
Bug #58363 for Catalyst-Plugin-FormValidator-Simple: typo at line 36
https://rt.cpan.org/Public/Bug/Display.html?id=58363
C::P::FormValidator::SImple の 36 行目を、
旧
$c->maybe::next::method(@_);
新
$c = $c->maybe::next::method(@_);
このように書き換えるだけで万事 ok。こんなことに時間を費やしたのかorz
- Comments: 0
- TrackBacks: 0
【Catalyst】HTML::Tidyを使って出力を整形する
いろんなテンプレートをインクルードしまくったせいか生成されるHTMLが非常に汚かったので、HTML::Tidyを使って整形してみた。
HTML::Tidyのインストール
これは前の記事を参照。
簡単に手順だけ書いておく *1 。
$ sudo yum install tidy libtidy libtidy-devel $ sudo cpan -i P/PE/PETDANCE/HTML-Tidy-1.08.tar.gz
- Comments: 0
- TrackBacks: 0
Catalyst::Model::Adaptor + TheSchwartz
TheSchwartz.pmをCatalyst::Model::AdaptorでModel化して扱う時のメモ。次のURLを参考にして設定を行ったのだが問題発生。
Catalyst::Model::AdaptorでTheSchwartzをModel化 - hide-k.net#blog
http://blog.hide-k.net/archives/2008/02/catalystmodelad_1.php
MyApp::Model::TheSchwartz
package MyApp::Model::TheSchwartz; use strict; use warnings; use base 'Catalyst::Model::Adaptor'; 1;
myapp.yml(部分)
Model::TheSchwartz:
class: "TheSchwartz"
constructor: "new"
args:
databases:
-
dsn: "dbi:mysql:myapp_db:localhost:3306"
user: "ユーザー名"
pass: "パスワード"
実行しようとすると、
$ sudo /etc/rc.d/init.d/httpd start
httpd を起動中: Syntax error on line 54 of /etc/httpd/conf.d/perl.conf:
Couldn't instantiate component "MyApp::Model::TheSchwartz", "unknown options HASH(0xae3ee38) at /usr/local/lib/perl5/site_perl/5.10.1/Catalyst/Model/Adaptor/Base.pm line 27"Compilation failed in require at (eval 2) line 3.\n
[失敗]
などというエラーが出てうまくいかないのだ。調べてみると、TheSchwartz->new()に渡す引数で怒られてるらしい。とりあえずTheSchwartz.pmを次のように修正して解決した。
*** /tmp/TheSchwartz.pm.orig 2010-02-18 10:06:45.000000000 +0900
--- /usr/local/lib/perl5/site_perl/5.10.1/TheSchwartz.pm 2010-02-18 10:17:20.000000000 +0900
***************
*** 27,33 ****
sub new {
my TheSchwartz $client = shift;
! my %args = @_;
$client = fields::new($client) unless ref $client;
croak "databases must be an arrayref if specified"
--- 27,33 ----
sub new {
my TheSchwartz $client = shift;
! my %args = ref $_[0] ? %{ $_[0] } : @_;
$client = fields::new($client) unless ref $client;
croak "databases must be an arrayref if specified"
- Comments: 2
- TrackBacks: 0
CentOSでperl 5.10.1 + Catalyst + mod_perl
CentOS 5.4は未だにperl-5.8.8なので、perl-5.10.1をソースからインストールした。この作業は簡単なので詳細は省く。
$ tar jxvf perl-5.10.1.tar.bz2 $ cd perl-5.10.1 $ ./Configure -de $ make $ make test $ sudo make install
しかし標準でインストールされるmod_perlはあくまでperl-5.8.8用にビルドされている。本当ならSRPMを落としてきてリビルドするのがいいのだが、面倒なのでmod_perlのソースからインストールする。
mod_perlのインストールにはapxsが必要だ。これはhttpd-develパッケージに入っている。
$ sudo yum install httpd-devel
後はいつもの手順通り、mod_perlのインストールだ。
- Comments: 0
- TrackBacks: 0
Catalyst + Lighttpd + FastCGI なテスト
Catalyst::Helper::Lighty にリスタート機能つけた - masaki@catalyst - Catalystグループヘルパーがあるおかげで操作は簡単。
http://catalyst.g.hatena.ne.jp/ikasam_a/20080318/1205778147
// 事前にLighttpdとFastCGIをインストールしておく必要がある
// アプリを作成
$ catalyst.pl MyApp
// ヘルパーを実行
$ cd MyApp/script
$ ./myapp_create.pl Lighty
// テストサーバを起動......アレ?
$ ./myapp_lighty.pl
Type of arg 1 to Parallel::SubFork::sub_fork must be block or sub {} (not null operation) at ./myapp_lighty.pl line 75, near "&spawn_fastcgi )"
Execution of ./myapp_lighty.pl aborted due to compilation errors.
と言うわけでちょっとバグがある。ヘルパーモジュールLighty.pmを次のように編集する。
- Comments: 0
- TrackBacks: 0
Static::SimpleとFormValidator::Simple::Auto
と、
Catalyst::Plugin::FormValidator::Simple::Auto
は同時に使えない......?(つーかモジュール名長すぎ)
エラーの意味が全然わかりませぬ('A`)
$ ./myapp_server.pl [debug] Debug messages enabled [debug] Statistics enabled [debug] Loaded plugins: .----------------------------------------------------------------------------. | Catalyst::Plugin::ConfigLoader 0.27 | | Catalyst::Plugin::FormValidator::Simple 0.13 | | Catalyst::Plugin::FormValidator::Simple::Auto 0.18 | '----------------------------------------------------------------------------' 〜中略〜 [info] MyApp powered by Catalyst 5.80007 Couldn't load class (MyApp) because: Inconsistent hierarchy during C3 merge of class 'MyApp': merging failed on parent 'Catalyst::Plugin::FormValidator::Simple::Auto' at /opt/local/lib/perl5/5.10.1/darwin-2level/mro.pm line 27. Compilation failed in require at /opt/local/lib/perl5/site_perl/5.10.1/darwin-2level/Class/MOP.pm line 98. at /opt/local/lib/perl5/site_perl/5.10.1/darwin-2level/Class/MOP.pm line 102 〜以下略〜
- Comments: 0
- TrackBacks: 0
$c->uri_for_actionの引数
uri_for_actionはドキュメントによると次のような構文になる。
$c->uri_for_action( $path, \@captures?, @args?, \%query_values? )この“
\@captures”と“@args”がそれぞれアトリビュートの“CaptureArgs”、“Args”に対応する。例として、次のようなチェーンドアクションを考える。ユーザー情報を編集するようなページを想定している。
- Comments: 0
- TrackBacks: 0
- Feeds
- CC Licence
-
このブログはクリエイティブ・コモンズでライセンスされています。
- Ferret アクセス解析
- W3C Validation
